springboot activemq(一)Queue(p2p)和Topic(發(fā)布訂閱)
這里安裝activemq就不再詳細介紹适刀。
安裝 https://blog.csdn.net/weixin_38361347/article/details/83796570
導(dǎo)入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
注意發(fā)消息的端口是61616 坝初, 采用tcp協(xié)議發(fā)送壁榕。
打開網(wǎng)頁控制界面端口是8161,內(nèi)部采用內(nèi)嵌jetty服務(wù)器列肢。
打開url是
http://127.0.0.1:8161/admin/
用戶名密碼默認為admin
配置文件
spring.activemq.broker-url=tcp://127.0.0.1:61616
spring.activemq.in-memory=true
spring.activemq.pool.enabled=false
spring.activemq.password=admin
spring.activemq.user=admin
#springboot 默認開啟點對點,訂閱需要手動開啟
#spring.jms.pub-sub-domain=true
配置隊列
@Bean
public Queue queue(){
return new ActiveMQQueue("a.queue");
}
@Bean
public Topic topic(){
return new ActiveMQTopic("a.topic");
}
首先來看point to point 簡稱p2p
消息隊列
設(shè)置隊列模式
spring.jms.pub-sub-domain=false 默認就是false
生產(chǎn)者
@Component
public class QueueSend {
@Autowired
JmsMessagingTemplate jmsMessagingTemplate;
// 發(fā)送消息,destination是發(fā)送到的隊列逗载,message是待發(fā)送的消息
public void send(Destination name, final String message){
jmsMessagingTemplate.convertAndSend(name,message);
}
}
消費者
@Component
public class QueueConsumer {
@JmsListener(destination = "queue")
public void receiveQueue(String text){
System.out.println("QueueConsumer 接收到的消息:" + text);
}
}
p2p 是點對點,一條消息只能有一個消費者進行消費链烈。
receiveQueue1 接收到的消息:我是p2p消息厉斟。
控制臺可以看到 2個消費者,入隊1條强衡,出隊1條擦秽。
在這里插入圖片描述
發(fā)布訂閱
切記springboot默認支持p2p開啟,發(fā)布訂閱需要手動開啟
spring.jms.pub-sub-domain=true
生產(chǎn)者
@Component
public class TopicSend {
@Autowired
JmsMessagingTemplate jmsMessagingTemplate;
// 發(fā)送消息,destination是發(fā)送到的隊列感挥,message是待發(fā)送的消息
public void send(Destination name, final String message){
jmsMessagingTemplate.convertAndSend(name,message);
}
}
消費者2個
@Component
public class TopicConsumer1 {
@JmsListener(destination="a.topic")
public void consumerMessage(String text){
System.out.println("從TopicConsumer1 topic隊列收到的回復(fù)報文為:"+text);
}
}
@Component
public class TopicConsumer2 {
@JmsListener(destination="topic")
public void consumerMessage(String text){
System.out.println("從TopicConsumer2 topic隊列收到的回復(fù)報文為:"+text);
}
}
如下:
從TopicConsumer1 topic隊列收到的回復(fù)報文為:訂閱消息缩搅。
從TopicConsumer2 topic隊列收到的回復(fù)報文為:訂閱消息。
網(wǎng)頁控制臺可以看到
2個消費者链快,入對類1條消息誉己,出隊列2條消息!
訂閱模式域蜗,發(fā)送一條消息巨双,消費者都可以收到消息,所以是2兩條霉祸。
在這里插入圖片描述