JMS(五):订阅/发布模式(SUB/PUB)

    订阅/发布模式:

        PUB/SUB方式的工作流程,首先subscriber(订阅者)向JMS容器订阅(Listen to)自己感兴趣的topic(主题),多个订阅者可以同时对一个主题进行订阅,消息发布者发布一条消息,所有订阅了该主题的订阅者都能收到这个消息。默认情况下,pub/sub方式下的消息不是持久的,这意味着,消息一经发出,不管有没有人接收,都不会保存下来,而且订阅者只能接收到自已订阅之后发布者发出的消息。这种方式有点像订阅报刊杂志,一种报刊可以有多人同时订阅,但订阅者只能收到开始订阅之后的报社发行的期刊。

   与点到点模型不同,发布/订阅模型中,消息生产者产生一个消息后,把这个消息发送到一个Topic中,这个Topic可以同时有多个接收者在监听,当一个消息到达这个Topic之后,所有消息接收者都会收到这个消息。

public class Test4 {

	public static void main(String[] args) throws JMSException {

		//建立与消息服务器的连接:
		ConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
		Connection connection = factory.createConnection();
		connection.start();

		//创建一个Topic:
		Topic topic = new ActiveMQTopic("testTopic");
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

		//创建第一个消费者
		MessageConsumer consumer1 = session.createConsumer(topic);
		consumer1.setMessageListener( new MessageListener(){
			@Override
			public void onMessage(Message topic) {
				TextMessage text = (TextMessage) topic;
				try {
					System.out.println( "第一个消费者接受消息:  "  + text.getText() );
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		});

		//创建第二个消费者
		MessageConsumer consumer2 = session.createConsumer(topic);
		consumer2.setMessageListener( new MessageListener(){
			@Override
			public void onMessage(Message topic) {
				TextMessage text = (TextMessage) topic;
				try {
					System.out.println( "第二个消费者接受消息:  "  + text.getText()+ "\n" );
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		});
		
		//创建一个生产者:
		MessageProducer producer = session.createProducer(topic);
		for( int i=0;i<5;i++){
			Message message = session.createTextMessage( " 我是第 " + i+ " 条消息。");
			producer.send(message);
		}
		
	}

}


    运行结果:

        

第一个消费者接受消息:   我是第 0 条消息。
第二个消费者接受消息:   我是第 0 条消息。

第一个消费者接受消息:   我是第 1 条消息。
第二个消费者接受消息:   我是第 1 条消息。

第一个消费者接受消息:   我是第 2 条消息。
第二个消费者接受消息:   我是第 2 条消息。

第一个消费者接受消息:   我是第 3 条消息。
第二个消费者接受消息:   我是第 3 条消息。

第一个消费者接受消息:   我是第 4 条消息。
第二个消费者接受消息:   我是第 4 条消息。


转载于:https://my.oschina.net/gently/blog/628838

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值