文档章节

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

berg-dm
 berg-dm
发布于 2016/03/02 21:29
字数 632
阅读 293
收藏 0

    订阅/发布模式:

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


© 著作权归作者所有

berg-dm
粉丝 26
博文 98
码字总数 88970
作品 0
深圳
程序员
私信 提问
消息中间件系列三、JMS和activeMQ的简单使用

一、JMS 1、什么是JMS   JMS(JAVA Message Service,java消息服务)本质是API,Java平台消息中间件的规范,java应用程序之间进行消息交换。并且通过提供标准的产生、发送、接收消息的接口简...

我巴巴
2018/10/06
0
0
JMS开发(二):深入PTP,Pub-Sub两种模式

1.PTP模型 PTP(Point-to-Point)模型是基于队列(Queue)的,对于PTP消息模型而言,它的消息目的是一个消息队列(Queue),消息生产者每次发送消息总是把消息送入消息队列中,消息消费者总是从消息队列...

Zhao-Qian
2012/11/18
1K
0
J2EE规范系列之 JMS1.1 (一) 基本概念

什么是JMS JMS(Java Message Service) 即Java消息服务。它提供标准的产生、发送、接收消息的接口简化企业应用的开发。它是J2EE规范的一部分,定义的接口标准,针对不同的厂商有不同的实现库。...

Garrry
2015/07/06
810
0
一起学ActiveMQ 01(JMS简介)

介绍JMS JMS API 说明书是Java程序创建,发送,接收异步消息的标准接口。许多企业J或组织实现了JMS规范说明书,就有了JMS产品,有时候叫消息中间件。现在流行的有如下几个 TIBCO EMS (TIBCO...

maxingji
2017/11/05
10
0
spring整合jms系列之----点对点(一)

JMS作为一个支持点对点(PTP)和订阅式(pub/sub)式的消息中间件,为很多项目开发者所使用。Spring对JMS提供了很好的支持,可以通过JmsTemplate来方便地实现消息服务,由于JMS对Spring的支持...

码上中国博客
2015/11/12
494
0

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
6
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部