前段时间学习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. git error: unable to write file xxx,git fatal: unable to write new index file

    执行git checkout -- . error: unable to write file mobile/manifest.jsonfatal: unable to write new index ...

  2. spring boot 注入 restTemplate

    转载自:http://blog.csdn.net/liuchuanhong1/article/details/54631080 package com.chhliu.springboot.restfu ...

  3. linux环境下,双击直连ping私有地址时候出现Destination host unreachable 解决办法

    在确保网线无故障的情况下,采取以下步骤 1.查看本机的hostname vim    /etc/sysconfig/network 2.编辑/etc/hosts vim /etc/hosts 加入以下 ...

  4. 《Java编程思想》笔记 第五章 初始化与清理

    1.构造器 因为创建一个类的对象构造器就会自动执行,故初始化某些东西特好 2.方法重载 方法名相同,参数列表不同. 2.1 区分重载方法 方法重载后区别不同方法的就是方法签名 -->参数类型和个 ...

  5. src2中的alpha融合ROI

    #include <cv.h> #include <highgui.h> int main(int argc, char** argv) { IplImage *src1,*s ...

  6. python笔记-邮件发送(smtplib)【转载】

    本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/python/ 前言 本篇总结了QQ邮箱和163邮箱发送邮件,邮件包含html中文和附件 ...

  7. spring报错 :java.lang.NoSuchMethodException: <init>()

        Spring要求init-method是一个无参数的方法,如果init-method指定的方法中有参数,那么Spring将会抛出java.lang.NoSuchMethodException ...

  8. thinkphp5.0配置nginx重写规则

    我的centeros7.3系统,单主机实例: vi /usr/local/nginx/conf/nginx.conf 在如图红框位置加入以下代码(图片是截取的,截取部分上方还有其他的默认配置代码,代码 ...

  9. AC日记——Red and Blue Balls codeforces 399b

    399B - Red and Blue Balls 思路: 惊讶的发现,所有的蓝球的消除都是独立的: 对于在栈中深度为i的蓝球消除需要2^i次操作: 代码: #include <cstdio&g ...

  10. POJ 3984 迷宫问题【BFS/路径记录/手写队列】

    迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31428 Accepted: 18000 Description 定义 ...