java - example - Configuración de ActiveMQ con Spring Boot
spring boot queue example (3)
Uso ActiveMQ como incrustado con Spring Boot. Parece que el Broker se crea a través de ActiveMQConnectionFactory. Entiendo que la forma de configurar el intermediario es establecer parámetros en la consulta con el intermediario. como se describe aquí: http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html
Me gustaría configurar algunas características sobre el DLQ, por lo que está en el atributo destinationPolicy, pero el tipo de atributo no es un tipo simple, sino un tipo complejo, ¿cómo puedo escribir el parámetro de consulta para deshabilitar DLQ, por favor?
Buena pregunta. Las propiedades de vm-transport para la creación automática de intermediarios son geniales, pero solo hasta un punto que creo que has alcanzado.
Mi sugerencia es que defina la configuración del intermediario como lo haría normalmente en XML y luego simplemente haga referencia a este xml en el URI. Las políticas de destino son de hecho una estructura compleja y no veo cómo sería una buena idea definirlas con parámetros de consulta simples, incluso si fuera posible.
vm://localhost?brokerConfig=xbean:activemq.xml
Tuve este problema y lo resolví utilizando un archivo de configuración de primavera. En mi caso, quería configurar mi broker para que persistiera.
Agregué las libs necesarias en mi pom: incluyendo activemq-broker, activemq-spring, spring-jms (y en mi caso, activemq-leveldb-store).
Mi archivo xml de primavera se veía así:
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="xyz">
<persistenceAdapter>
<levelDB directory="activemq-data"/>
</persistenceAdapter>
<transportConnectors>
<transportConnector uri="vm:localhost?persistent=true" />
</transportConnectors>
</broker>
</beans>
Y registré el archivo de primavera en una de mis clases de configuración:
@ImportResource("activemq-spring.xml")
Eso hizo el trabajo.
Probé la solución xbeans primero, pero me quedé atascado porque me faltaban algunas clases de xbeans, y no sabía si era una versión de cosa o qué. Estoy usando activemq 5.12.1
Complementando respuestas de @Petter y @April, debajo de las mismas soluciones pero con muestras más completas:
1. Solución Petter, importe activemq.xml en la interfaz de fábrica de la conexión
build.gradle
ext {
springBootVersion = "1.5.3.RELEASE"
activeMQVersion = "5.14.5"
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-activemq:${springBootVersion}")
compile("org.apache.activemq:activemq-broker:${activeMQVersion}")
testCompile("org.springframework.boot:spring-boot-starter-test:${springBootVersion}")
testCompile group: ''org.apache.activemq'', name: ''activemq-spring'', version: "${activeMQVersion}"
testCompile("junit:junit:4.12")
}
src / main / resources / activemq.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.4.0.xsd
">
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="broker1" persistent="false" >
<transportConnectors>
<transportConnector name="vm" uri="vm://broker1"/>
</transportConnectors>
</broker>
</beans>
Config.java
@EnableJms
@SpringBootApplication
@EnableAutoConfiguration
@Configuration
public class Config {}
application.properties
spring.activemq.broker-url=vm://broker1?brokerConfig=xbean:activemq.xml
2. Solución de abril, importar activemq.xml en Spring Configuration
Simplemente elimine application.properties
luego agregue la entrada @ImportResource("classpath:activemq.xml")
a Config.java
Config.java
@EnableJms
@SpringBootApplication
@EnableAutoConfiguration
@Configuration
@ImportResource("classpath:activemq.xml")
public class Config {}