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 条消息。


你可能感兴趣的:(JMS(五):订阅/发布模式(SUB/PUB))