ActiveMQ-与SpringBoot整合-主题篇
Posted 闲言博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActiveMQ-与SpringBoot整合-主题篇相关的知识,希望对你有一定的参考价值。
1.创建生产者项目
1.1 添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--spring boot整合activemq的jar包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
</dependencies>
1.2 配置yml文件
server:
port: 7777
spring:
activemq:
# activemq的broker的url
broker-url: tcp://127.0.0.1:61616
# 连接activemq的broker所需的账号和密码
user: admin
password: admin
jms:
# 目的地是queue还是topic, false(默认) = queue true = topic
pub-sub-domain: true
# 自定义队列名称
mytopic: boot-activemq-topic
1.3 编写生产者启动类
@SpringBootApplication
@EnableScheduling
public class AppProduct
public static void main(String[] args)
SpringApplication.run(AppProduct.class,args);
1.4 编写生产者配置类,将ActiveMQTopic添加到容器中
@Component
@EnableJms
public class ConfigBean
@Value("$mytopic")
private String topicName ;
@Bean
public Topic topic()
return new ActiveMQTopic(topicName);
1.5 发送消息
这里我用了一个定时任务,定时往主题里发送消息
@Component
public class TopicProduce
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate ;
@Autowired
private Topic topic ;
@Scheduled(fixedDelay = 3000)
public void produceTopic()
jmsMessagingTemplate.convertAndSend(topic,"主题消息"+ UUID.randomUUID().toString().substring(0,6));
注意:生产者生产时,topic不保存消息它是无状态的不落地,假如无人订阅就去生产,那就是一条废消息,所以,一般先启动消费者再启动生产者
。
2.创建消费者项目
2.1 添加依赖
同上
2.2 配置yml文件
同上(如果需要同时启动生产者和消费者,这里需要修改项目的端口号,否则端口冲突)
2.3 编写消费者启动类
@SpringBootApplication
public class AppConsumer
public static void main(String[] args)
SpringApplication.run(AppConsumer.class,args);
2.4 编写消费者消费方法类
@Component
public class TopicConsumer
@JmsListener(destination = "$mytopic")
public void receive(TextMessage textMessage) throws Exception
System.out.println("消费者受到订阅的主题:"+textMessage.getText());
2.5 启动消费者工程
2.6 启动生产者工程
2.7 查看后台
有一个消费者,进入了15条消息,消费了15条消息
3.项目结构
以上是关于ActiveMQ-与SpringBoot整合-主题篇的主要内容,如果未能解决你的问题,请参考以下文章