JMS学习(一)

转自:https://blog.csdn.net/jiuqiyuliang/article/details/46701559

1.基本概念

JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。

2.消息模型

P2P

Pub/Sub

3.P2P

  模式:

  1. 消息队列(Queue)
  2. 发送者(Sender)
  3. 接收者(Receiver)
  4. 每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。

   特点

  1. 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
  2. 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列
  3. 接收者在成功接收消息之后需向队列应答成功

4.Pub/Sub

 模式图

  1. 主题(Topic)
  2. 发布者(Publisher)
  3. 订阅者(Subscriber)
    客户端将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。

  特点:

  1. 每个消息可以有多个消费者
  2. 发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。
  3. 为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。

5.JMS编程模型

  1.ConnectionFactory:创建connection的工厂,针对两种不同的消息模型,有QueueConnectionFactory和TopicConnectionFactory

  2.Destination:对于生产者来说它的destination是某个queue或topic;对于消费者来说它的destination也是

  3.Connection:表示在客户端和JMS系统之间建立的连接(对TCP/IP socket的包装);connection可以产生多个session;connection有QueueConnection和TopicConnection两种

  4.session:操作消息的接口,可通过session创建生产者/消费者/消息等;session 提供了事物的功能;当我们要使用session发送/接收多个消息时,可将这些动作放到一个事物中;有QueueSession和TopicQueue两种

  5.消息的生产者:消息生产者由Session创建,并用于将消息发送到Destination。同样,消息生产者分两种类型:QueueSender和TopicPublisher。可以调用消息生产者的方法(send或publish方法)发送消息。

  6.消息的消费者:消息消费者由Session创建,用于接收被发送到Destination的消息。两种类型:QueueReceiver和TopicSubscriber。可分别通过session的createReceiver(Queue)或createSubscriber(Topic)来创建。当然,也可以session的creatDurableSubscriber方法来创建持久化的订阅者。

  7.MessageListener:消息监听器。如果注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法

6.好处

  1.提供消息灵活性

  2.松散耦合

  3.异步性

转载于:https://www.cnblogs.com/hangzhi/p/9008433.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

macos 致命错误: 在类路径或引导类路径中找不到程序包 java.lang

本文环境:MacOS 程序运行没有问题,但在 maven 打包时,报了如下错误: 致命错误: 在类路径或引导类路径中找不到程序包 java.lang [INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERRO…

[vue] 你知道vue的模板语法用的是哪个web模板引擎的吗?说说你对这模板引擎的理解

[vue] 你知道vue的模板语法用的是哪个web模板引擎的吗?说说你对这模板引擎的理解 模板引擎: 负责组装数据,以另外一种形式或外观展现数据。 优点: 可维护性(后期改起来方便); 可扩展性&#…

python 面向对象 新式类和经典类

# 经典类写法# schoolMember.__init__(self, name, age, sex)# 新式类写法super(Teather, self).__init__(name, age, sex) class schoolMember(object):学校成员分类member 0def __init__(self, name, age, sex):self.name nameself.age ageself.sex sexself.enroll() # …

支付宝支付—沙箱环境使用

前言 支付宝支付—沙箱环境使用「本文」支付宝支付-支付宝PC端扫码支付支付宝支付-手机浏览器H5支付 支付宝提供的沙箱环境,入门门槛非常低,不需要商家认证那一套,这一点对开发者是非常友好的,可以直接在本地运行测试&#xff0…

[vue] 你知道v-model的原理吗?说说看

[vue] 你知道v-model的原理吗?说说看 v-model 為一個語法糖,Vue 會默認使用一個名為 value 的 prop,以及名為 input 的事件。 為了避免不同的 value 有不同的作用,現在可以使用下面的方式自訂義自己想要的 v-model 行為。 mode…

Virut样本取证特征

1、网络特征 ant.trenz.pl ilo.brenz.pl 2、文件特征 通过对文件的定位,使用PEID查看文件区段,如果条件符合增加了7个随机字符区段的文件,则判定为受感染文件。 3、受感染特征 参考: 【病毒分析】Virut.ce-感染型病毒分析报告 htt…

[vue] 你有使用过vue开发多语言项目吗?说说你的做法?

[vue] 你有使用过vue开发多语言项目吗?说说你的做法? 使用Vue-i18n 加载不同的语言配置文件, 重要是初始化时,判断当前语言环境,要想好存储方案 采用i18n来解决国际化问题,关于语言环境的存储方案,看到有…

ES6必知必会 (七)—— Generator 函数

Generator 函数 1.Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同,通常有两个特征: function关键字与函数名之间有一个星号; 函数体内部使用yield表达式,定义不同的内部状态 //一个简单…

[vue] 在使用计算属性的时,函数名和data数据源中的数据可以同名吗?

[vue] 在使用计算属性的时,函数名和data数据源中的数据可以同名吗? 莫名其妙的问题。可以同名,但data会覆盖methods。并且本就不该同名,同名说明你命名不规范。然后解释为什么会覆盖,因为Props、methods、data、comput…

IDEA启动项目报错:Error:(1, 1) java: 非法字符: '\ufeff'

1. 报错信息 IDEA导入支付宝支付测试Demo启动报错,报错信息如下: Error:(1, 1) java: 非法字符: \ufeff Error:(1, 10) java: 需要class, interface或enum经测试,MyEclipse并没有报同样的错误信息。 2. 解决方法 在IDEA右下角将编码改为GBK&a…

[js] 请使用js实现一个秒表计时器的程序

[js] 请使用js实现一个秒表计时器的程序 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&quo…

IDEA中导入支付宝电脑网站支付测试Demo遇到的错误

前言 官方推荐Demo的运行环境为Eclipse&#xff0c;本次主要针对IDEA中导入遇到的一些问题 本地环境&#xff1a;IDEA Tomcat8.5 1、错误一 Error:(1, 1) java: 非法字符: \ufeff Error:(1, 10) java: 需要class, interface或enum请参考这篇文章&#xff1a;https://www.cnblo…

[js] 模拟 localStorage 时如何实现过期时间功能

[js] 模拟 localStorage 时如何实现过期时间功能 1.存储时记录下有效截止时间 2.取数据时判断是否超过有效时间,在有效期内则返回,不在则提示或返回空并且将其删除class MyStorage {get(key) {const wrapValue localStorage.getItem(key)if (wrapValue null) {return undefi…

表格

表格划分三部分&#xff1a;表头&#xff0c;主体&#xff0c;教主 thead&#xff1a;表格的头&#xff08;放标题之类的内容&#xff09; tbody&#xff1a;表格的主体&#xff08;放数据主体&#xff09; tfoot&#xff1a;表格的脚&#xff08;放表格的脚注&#xff09; 转载…

[js] 请使用js实现商品的自由组合,并说说你的思路

[js] 请使用js实现商品的自由组合&#xff0c;并说说你的思路 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

maven打包:找不到符号 符号: 方法 getXxx()

先交代一下我这边的情况&#xff0c;如若跟你想要的结果不符&#xff0c;勿喷。 聚合项目 使用过 mvn install 指令 聚合项目&#xff0c;主模块 A 需要打 war 包&#xff0c;其他模块 BCD 需要打为 jar 包作为其依赖。 先看一下报错截图&#xff1a; 这次的问题主要在于之前在…

DHCP的4步租约过程

请尊重原作者 &#xff1a;http://blog.51cto.com/yuanbin/109574 DHCP租约过程就是DHCP客户机动态获取IP地址的过程。 DHCP租约过程分为4步&#xff1a; ①客户机请求IP&#xff08;客户机发DHCPDISCOVER广播包&#xff09;&#xff1b; ②服务器响应&#xff08;服务器发DHCP…

[js] js中的undefined和 ReferenceError: xxx is not defined 有什么区别?

[js] js中的undefined和 ReferenceError: xxx is not defined 有什么区别&#xff1f; undefined是变量已声明&#xff0c;但未赋值 ReferenceError: xxx is not defined 是xxx未声明&#xff0c;使用了不存在的变量 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端…

支付宝支付-支付宝PC端扫码支付

前言 支付宝支付—沙箱环境使用支付宝支付-支付宝PC端扫码支付「本文」支付宝支付-手机浏览器H5支付「待写」 PC端扫码支付&#xff0c;其实就是就是 电脑网站支付&#xff0c;本文基于支付宝沙箱环境&#xff0c;不了解的可以看一下上边的链接。 废话不多说&#xff0c;直接进…

[js]JavaScript Number.toPrecision() 函数详解

[js]JavaScript Number.toPrecision() 函数详解 JavaScript: numberObject.toPrecision( [ precision ] ) 如果没有提供precision参数或其值为undefined&#xff0c;则将转而调用toString()方法进行处理。 如果提供了参数&#xff0c;则参数precision必须介于 [1, 21] 之间&…