1 启动类必须加上 @EnableJms 注解
2 Springboot引入activemq maven 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
3 Springboot整合activemq的时候 默认为queue,如果需要使用topic模式 则配置
#默认情况下activemq提供的是queue模式,若要使用topic模式需要配置未true
spring.jms.pub-sub-domain=true
4 Springboot整合activemq的时候 如果配置连接池(如果不加以下maven依赖 会启动项目报错,提示JmsMessagingTemplate无法注入),配置如下
spring.activemq.pool.max-connections=10
spring.activemq.pool.idle-timeout=300
spring.activemq.pool.enabled=true
使用springboot2.0+及以下版本时候,maven配置依赖是:
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
</dependency>
使用springboot2.1+时候,maven配置依赖是:
<dependency>
<groupId>org.messaginghub</groupId>
<artifactId>pooled-jms</artifactId>
</dependency>
5由于本人使用的Springboot版本为2.3.7,activemq完整配置 application.properties 信息如下,当然还有很多可以配置的选项,可以自行研究
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.packages.trust-all=true
spring.activemq.pool.max-connections=10
spring.activemq.pool.idle-timeout=300
spring.activemq.pool.enabled=true
#默认情况下activemq提供的是queue模式,若要使用topic模式需要配置未true
spring.jms.pub-sub-domain=true
#额外配置的topic 名称
activemq.pass.data.topic=pass-data-topic
activemq.illegal.data.topic=illegal-data-topic
activemq.interval.data.topic=interval-data-topic
maven完整依赖如下,因为我启用了activemq连接池,所以需要加连接池配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.messaginghub</groupId>
<artifactId>pooled-jms</artifactId>
</dependency>
6 activemq配置类ActiveMqConfig ,在此配置需要的多个topic名称
@Configuration
public class ActiveMqConfig {
@Value("${activemq.pass.data.topic}")
private String activemqPassDataTopic;
@Value("${activemq.illegal.data.topic}")
private String activemqIllegalAataTopic;
@Value("${activemq.interval.data.topic}")
private String activemqIntervalDtaTopic;
@Bean(name = "activemqPassDataTopic")
public Topic activemqPassDataTopic() {
return new ActiveMQTopic(activemqPassDataTopic);
}
@Bean(name = "activemqIllegalAataTopic")
public Topic activemqIllegalAataTopic() {
return new ActiveMQTopic(activemqIllegalAataTopic);
}
@Bean(name = "activemqIntervalDtaTopic")
public Topic activemqIntervalDtaTopic() {
return new ActiveMQTopic(activemqIntervalDtaTopic);
}
}
7 给不同topic发送消息
自动注入以下配置
@Resource
private JmsMessagingTemplate jmsMessagingTemplate;
@Resource(name = "activemqPassDataTopic")
private Topic activemqPassDataTopic;
@Resource(name = "activemqIllegalAataTopic")
private Topic activemqIllegalAataTopic;
@Resource(name = "activemqIntervalDtaTopic")
private Topic activemqIntervalDtaTopic;
发送消息
jmsMessagingTemplate.convertAndSend(activemqPassDataTopic,"我是activemqPassDataTopic");
jmsMessagingTemplate.convertAndSend(activemqIllegalAataTopic,"我是activemqIllegalAataTopic");
jmsMessagingTemplate.convertAndSend(activemqIntervalDtaTopic,"我是activemqIntervalDtaTopic");
8 登录activemq控制台,查看topic列表,如下图
9 接收指定 topic 消息
@JmsListener(destination="pass-data-topic")
public void onMessagePassData(String content) {
log.info("pass-data-topic:{}", content);
}
@JmsListener(destination="illegal-data-topic")
public void onMessageIlleagalData(String content) {
log.info("illegal-data-topic:{}", content);
}
@JmsListener(destination="interval-data-topic")
public void onMessageIntervalIlleagalData(String content) {
log.info("interval-data-topic:{}", content);
}