前段时间学习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两种消息模型的更多相关文章

  1. rabbitmq五种消息模型整理

    目录 0. 配置项目 1. 基本消息模型 1.1 生产者发送消息 1.2 消费者获取消息(自动ACK) 1.3 消息确认机制(ACK) 1.4 消费者获取消息(手动ACK) 1.5 自动ACK存在的问 ...

  2. 以两种异步模型应用案例,深度解析Future接口

    摘要:本文以实际案例的形式分析了两种异步模型,并从源码角度深度解析Future接口和FutureTask类. 本文分享自华为云社区<[精通高并发系列]两种异步模型与深度解析Future接口(一) ...

  3. 【高并发】两种异步模型与深度解析Future接口

    大家好,我是冰河~~ 本文有点长,但是满满的干货,以实际案例的形式分析了两种异步模型,并从源码角度深度解析Future接口和FutureTask类,希望大家踏下心来,打开你的IDE,跟着文章看源码,相 ...

  4. css的两种盒子模型

    css的两种盒子模型:W3C标准盒子模型.IE盒子模型 两者的相同之处:都包含margin.border.padding.content 两者的不同之处:W3C标准盒子模型的content部分不包含其 ...

  5. RabbitMQ之五种消息模型

    首先什么是MQ MQ全称是Message Queue,即消息对列!消息队列是典型的:生产者.消费者模型.生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息.因为消息的生产和消费都是异步的,而 ...

  6. DIV+CSS两种盒子模型(W3C盒子与IE盒子)

    在辨析两种盒子模型之前.先简单说明一下什么叫盒子模型. 原理: 先说说我们在网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS ...

  7. 两种Tensorflow模型保存的方法

    在Tensorflow中,有两种保存模型的方法:一种是Checkpoint,另一种是Protobuf,也就是PB格式: 一. Checkpoint方法: 1.保存时使用方法: tf.train.Sav ...

  8. Java NIO学习与记录(八): Reactor两种多线程模型的实现

    Reactor两种多线程模型的实现 注:本篇文章例子基于上一篇进行:Java NIO学习与记录(七): Reactor单线程模型的实现 紧接着上篇Reactor单线程模型的例子来,假设Handler的 ...

  9. DIV+CSS两种盒子模型

    盒子模型有两种,分别是 IE 盒子模型和标准 W3C 盒子模型.他们对盒子模型的解释各不相同, 先来看看我们熟悉的标准盒子模型: 从上图可以看到标准 W3C 盒子模型的范围包括 margin.bord ...

随机推荐

  1. krpano--控制热点跳转到场景的指定视角

    krpano课堂(肥宗) · 2015-07-13 19:32 有这么一种情况,假设我们用三个场景,这三个场景恰好是一条街道的同一方向的三个拍摄点.如上图. 我们可以通过设置A.B.C三个场景中的vi ...

  2. Selenium2+python自动化42-判断元素(expected_conditions)【转载】

    前言 经常有小伙伴问,如何判断一个元素是否存在,如何判断alert弹窗出来了,如何判断动态的元素等等一系列的判断,在selenium的expected_conditions模块收集了一系列的场景判断方 ...

  3. maven基本知识

    maven的文件夹: projectName src -main -java -package -test -java     -package  -resource maven的命令: mvn - ...

  4. 一次处理CentOS服务器被攻击往外发广播包

    情况是这样:我们在某地托管的一台linux服务器,突然接到机房电话说是我们机器将整个IDC网络搞瘫了.外部机器没法访问IDC.  挂掉电话后:我就开始考虑,托管机器的机房是有硬防的,我本身一台机器怎么 ...

  5. Laravel查询技巧

    1.同时增加几个字段的数量 DB::table('project') ->where('id',$yewuid) ->increment('count', 1, [ 'click'=> ...

  6. 好的web前端是如何拿到30万年薪的?

    2018年前端开发不再像过去几年里新技术框架层出不穷,而是各种组件,模块,很多东西都有痕迹可寻,技术都在原来的基础上有了革新和沉淀. 前端招聘方面也在紧跟技术发展,大量“滥竽充数”的速成开发者开始失去 ...

  7. linux中Firefox浏览器 手动安装 flash

    打开firefox浏览器,当你打开有关音频或者视频的网站时候,会提示你安装 flash,可是,官网提示,需要手动安装. 1.先从提示的官网上下载好文件 “install_flash_player_11 ...

  8. python3爬虫爬取猫眼电影TOP100(含详细爬取思路)

    待爬取的网页地址为https://maoyan.com/board/4,本次以requests.BeautifulSoup css selector为路线进行爬取,最终目的是把影片排名.图片.名称.演 ...

  9. 线段树+Dfs序【CF620E】New Year Tree

    Description 你有一棵以1为根的有根树,有n个点,每个节点初始有一个颜色c[i]. 有两种操作: 1 v c 将以v为根的子树中所有点颜色更改为c 2 v 查询以v为根的子树中的节点有多少种 ...

  10. HDU1754I Hate It(线段树)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...