ActiveMQ 发布订阅(topic)模式_发送消息和接收消息

本文介绍了ActiveMQ的发布订阅(Topic)模式,强调了其异步特性和消息共享。在发布订阅模式下,消息发送到JMS中间件后,由服务端监听并订阅。接收端通过监听模式持续等待消息,实现异步接收。示例代码展示了如何创建连接、Session、Topic,以及设置监听器来接收消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


发布订阅模式流程:          监听JMS

1)  客户机发送消息到JMS消息中间件

2)  服务端负责监听JMS消息目的地。

3)  发现JMS里面有消息产生,服务就可以订阅。

特点:

1)  消息可以被多个服务共享

2)  消息直到被所有消费后,消息消失。


// 发布订阅模式发送消息


public class MySendMessageMQ {

@Test
public void sendTopicMessage() throws Exception {
// 创建消息工厂:协议,地址(ip),端口
ConnectionFactory cf = new ActiveMQConnectionFactory(
"tcp://192.168.66.66:61616");
//获取连接
Connection connection = cf.createConnection();
//开启连接
connection.start();

//从连接中获取Session会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//获取消息发送目的地
//在JMS消息服务器开辟一块空间,空间名称:myTopic

Topic topic = session.createTopic("myTopic");   //createTopic()发布订阅模式
//创建消息发送者
MessageProducer producer = session.createProducer(topic);

//创建消息
TextMessage message = new ActiveMQTextMessage();
message.setText("这是一条消息");
//发送消息
producer.send(message);

//管理资源
producer.close();
session.close();
connection.close();

}


}

发布订阅模式
发布一条消息 多人接受 所以没有同步模式 只有异步模式


//接受消息:异步模式:使用监听模式接受消息

                

// 接收消息receiveTopicMessage()类 必须先启动  一直等待 一直监听 消息服务器

@Test

public void receiveTopicMessage() throws Exception{   
// 创建消息工厂:参数:协议,地址,端口
ConnectionFactory cf = new ActiveMQConnectionFactory(
"tcp://192.168.66.66:61616");
//获取连接
Connection connection = cf.createConnection();
//开启连接
connection.start();

//从连接中获取Session
//第一个参数:消息事务
//第二个参数:事务使用自动应答模式
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//获取消息发送目的地:
//创建消息发送目的地,相当于在JMS服务器中开辟一块空间,空间名称myTopic
Topic topic = session.createTopic("myTopic");   // 发布订阅模式
//创建消息接受者
MessageConsumer consumer = session.createConsumer(topic);
//使用监听模式接受消息
consumer.setMessageListener(new MessageListener() {

@Override
public void onMessage(Message message) {

if(message instanceof TextMessage){
TextMessage tm = (TextMessage) message;
try {
System.out.println(tm.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
System.in.read(); //一直等待消息的注入

//关闭资源
consumer.close();
session.close();
connection.close();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值