JMS两种消息模型
前段时间学习EJB。接触到了JMS(Java消息服务),JMS支持两种消息模型:Point-to-Point(P2P)和Publish/Subscribe(Pub/Sub),即点对点和公布订阅模型。
个人认为这两个模型挺easy理解的,由于生活中的样例还挺多的。
1, P2P模型
有下面概念:消息队列(Queue)、发送者(Sender)、接收者(Receiver)。每一个消息都被发送到一个特定的队列,接收者从队列获取消息。队列保留着消息,直到它们被消费或超时。
(1) 每一个消息仅仅有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
(2) 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后。无论接收者有没有正在执行,它不会影响到消息被发送到队列。
(3) 接收者在成功接受消息之后须要向队列应答成功
注:假设希望发送的每一个消息都被成功处理。或被特定的消费者消费,那么须要採用P2P模型。
使用场合:想让接收者进行且仅仅进行一次处理,组件之间进行同步通信。
个人理解:这样的模型的应用非经常见,比如:qq/微信/飞信聊天(私聊)。(1)小A和小B互加qq好友,小A给小B发一条消息”你干嘛呢?”,这条消息仅仅有小B能接收到。别人接收不到——每一个消息仅仅有一个消费者;(2)假设小B没有登录qq。也没关系。当小B登录qq后,就会看到这条消息——发送者和接收者之间在时间上没有依赖性,也就是说,当发送者发送了消息之后。无论接收者有没有正在执行,它不会影响到消息被发送到队列;
2。Pub/Sub模型
有下面概念:主题(Topic)、公布者(Publisher)、订阅者(Subscriber)。
client将消息发送到主题。
多个公布者将消息发送到Topic。系统将这些消息传递给多个订阅者。
(1)
每一个消息能够有多个消费者
(2) 公布者和订阅者之间有时间上的依赖性。
针对某个主题(Topic)的订阅者,它必须创建一个订阅之后,才干消费公布者的消息,并且,为了消费消息,订阅者必须保持执行的状态。
为了缓和这种严格的时间上的依赖性,JMS同意订阅者创建一个可持久化的订阅(即,发送者和接收者之间在时间上没有依赖性。
这种话,即使订阅者没有执行,它也能接收到公布者的消息。)
假设希望发送的消息能够被一个/多个消费者消费,那么能够採用Pub/Sub模型。
个人理解:这种模型的应用也非经常见。比如,假设qq群聊天是这种:小A、小B、小C都是”聊天群”中的成员,小A、小B在线。小C不在线,小A公布一条消息”明天放假”,那么仅仅有小B能接收到,当小C上线后也接收不到。
这样是不是非常不合理——公布者和订阅者之间有时间上的依赖性;因此,为了缓和这种严格的时间上的依赖性,JMS同意订阅者创建一个可持久化的订阅(即,发送者和接收者之间在时间上没有依赖性。这种话。即使订阅者没有执行,它也能接收到公布者的消息。
)——还是上面的样例。小A、小B、小C都是”聊天群”中的成员,小A、小B在线,小C不在线,小A公布一条消息”明天放假”。小B能够接收到。当小C上线后也能够接收到。
以上仅仅是眼下的个人理解,可能与实际有所偏差。
3,总结:
P2P模型与Pub/Sub模型的根本差别:对于p2p模型的每一个消息仅仅能有一个消费者 ; pub/sub模型能够有多个消费者 。
JMS两种消息模型的更多相关文章
- rabbitmq五种消息模型整理
目录 0. 配置项目 1. 基本消息模型 1.1 生产者发送消息 1.2 消费者获取消息(自动ACK) 1.3 消息确认机制(ACK) 1.4 消费者获取消息(手动ACK) 1.5 自动ACK存在的问 ...
- 以两种异步模型应用案例,深度解析Future接口
摘要:本文以实际案例的形式分析了两种异步模型,并从源码角度深度解析Future接口和FutureTask类. 本文分享自华为云社区<[精通高并发系列]两种异步模型与深度解析Future接口(一) ...
- 【高并发】两种异步模型与深度解析Future接口
大家好,我是冰河~~ 本文有点长,但是满满的干货,以实际案例的形式分析了两种异步模型,并从源码角度深度解析Future接口和FutureTask类,希望大家踏下心来,打开你的IDE,跟着文章看源码,相 ...
- css的两种盒子模型
css的两种盒子模型:W3C标准盒子模型.IE盒子模型 两者的相同之处:都包含margin.border.padding.content 两者的不同之处:W3C标准盒子模型的content部分不包含其 ...
- RabbitMQ之五种消息模型
首先什么是MQ MQ全称是Message Queue,即消息对列!消息队列是典型的:生产者.消费者模型.生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息.因为消息的生产和消费都是异步的,而 ...
- DIV+CSS两种盒子模型(W3C盒子与IE盒子)
在辨析两种盒子模型之前.先简单说明一下什么叫盒子模型. 原理: 先说说我们在网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS ...
- 两种Tensorflow模型保存的方法
在Tensorflow中,有两种保存模型的方法:一种是Checkpoint,另一种是Protobuf,也就是PB格式: 一. Checkpoint方法: 1.保存时使用方法: tf.train.Sav ...
- Java NIO学习与记录(八): Reactor两种多线程模型的实现
Reactor两种多线程模型的实现 注:本篇文章例子基于上一篇进行:Java NIO学习与记录(七): Reactor单线程模型的实现 紧接着上篇Reactor单线程模型的例子来,假设Handler的 ...
- DIV+CSS两种盒子模型
盒子模型有两种,分别是 IE 盒子模型和标准 W3C 盒子模型.他们对盒子模型的解释各不相同, 先来看看我们熟悉的标准盒子模型: 从上图可以看到标准 W3C 盒子模型的范围包括 margin.bord ...
随机推荐
- ReadOnly与Enabled
txtDlrCode.ReadOnly = true; 1.当设置为只读,文本框有点击事件,点击该文本框还是可以响应点击事件 2.设置为只读,C#后台无法取得文本框的值,txtDlrCode.Text ...
- servlet(6) - servlet总结 - 小易Java笔记
垂阅前必看: 这都是我总结的我觉得是学习servlet应该掌握的,我在学习期间也做了一个博客项目来让所学的知识得以巩固.下面就是博客项目链接.前面的servlet相关的笔记总汇,还有就是我把觉得在学习 ...
- stylus安装以及使用命令行生成css文件
Stylus 是一个CSS的预处理框架,2010年产生,来自Node.js社区,主要用来给Node项目进行CSS预处理支持,所以 Stylus 是一种新型语言,可以创建健壮的.动态的.富有表现力的CS ...
- jquery发送json请求,给springmvc接收
js var obj = { 'name':name, 'desc':desc, 'scheduleStartTime':scheduleStartTime, 'scheduleEndTime':sc ...
- java 生成execl下载
/** * execl Export */ private void createExecl(HttpServletRequest request, HttpServletResponse respo ...
- mvvm command的使用案例
主界面如下: 前台代码: <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.mic ...
- MYSQL是什么?
#转载请联系 数据库主要分为两大类,关系型数据库和非关系型数据库.MYSQL是关系型数据库. 一.什么是关系型数据库呢? 1.关系型数据库,本质上是使用一张二维表来表示关系,和Excel表类似. 2. ...
- Selenium2+python自动化69-PhantomJS使用【转载】
前言 PhantomJS是一个没有界面的浏览器,本质上是它其实也就是一个浏览器,只是不在界面上展示. PhantomJS非常适合爬虫方面,很多玩爬虫的都喜欢用这个浏览器. 一.PhantomJS环境准 ...
- Selenium2+python自动化54-unittest生成测试报告(HTMLTestRunner)【转载】
前言 批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的. unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLT ...
- nginx [error] open() "/usr/local/nginx/logs/nginx.pid" failed的解决
今天关闭nginx后重启不了: nginx -s reload 结果报错: nginx: [error] open() "/usr/local/nginx/logs/nginx.pid&qu ...