JMS持久订阅(DurableSubscribe)模式示例

来源:互联网 发布:淘宝客户管理系统 编辑:程序博客网 时间:2024/06/05 04:24

为了缓和严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。

发布者:

package com.zzj.durablesubscriber;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Message;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.Topic;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class Producer {private static final String DEST = "com.zzj.dest.03";public static void main(String[] args) throws Exception {ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, ActiveMQConnection.DEFAULT_BROKER_URL);Connection connection = factory.createConnection();connection.start();Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);Topic topic = session.createTopic(DEST);MessageProducer producer = session.createProducer(topic);Message message = session.createTextMessage("Hello world!");producer.send(message);System.out.println("发送成功!");// 关闭资源producer.close();session.close();connection.close();}}


创建一个DurableSubscriber的两个前提条件是:
connection.setClientID("ClientID");
session.createDurableSubscriber(topic,"SubscriberName");

订阅者:

package com.zzj.durablesubscriber;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.MessageConsumer;import javax.jms.Session;import javax.jms.TextMessage;import javax.jms.Topic;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;/** * 同步消费 * @author lenovo * */public class Customer {private static final String DEST = "com.zzj.dest.03";public static void main(String[] args) throws Exception {ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, ActiveMQConnection.DEFAULT_BROKER_URL);Connection connection = factory.createConnection();connection.setClientID("zzj.client01");connection.start();Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);Topic topic = session.createTopic(DEST);MessageConsumer consumer = session.createDurableSubscriber(topic, "zzj.subscriber01");TextMessage message = (TextMessage) consumer.receive(); // 阻塞方法,直到接收到消息System.out.println(message.getText());// 关闭资源consumer.close();session.close();connection.close();}}




原创粉丝点击