JMS即java消息服务。在JMS中JMS消息并不同应用直接交互,而是同JMS服务器的目的地(destination)进行交互,比如点对点(P2P)或者发布/订阅(Publish/Subscribe)。发送消息的应用程序不关注接收消息的应用程序是否正常工作,接受消息的应用程序也不关注发送消息的应用程序。他们仅仅同目的地进行交互。
Spring提供了JMS服务抽象框架,以简化对JMS API的使用。同时还能屏蔽不同JMS版本间的差异性。
1.背景
JMS,是能够异步处理客户请求的开发模型。为了支持消息的异步处理,java/J2EE平台引入了JMS API。JMS支持两种消息模型:点对点和发布/订阅模式。
点对点模式的含义是:消息生产者将消息发布到Qqueue中,在随后的操作中将会有消息消费者从该Qqueue中将消息消费掉。一旦消息消费掉,Qqueue中将不再存在他,因此其他消息消费者将不能够获得已消费的消息。注意,尽管Qqueue支持同时存在多个消息消费者,但对于单个的消息而言,仅仅会有一个消息消费者消费它。
发布/订阅模式的含义:消息生产者(发布者)将消息发布到Topic中,与此同时将会有多个消息消费者(订阅者)消费发布到该Topic的消息。它与点对点不同,即发布到Topic的消息将会被所有已订阅该Topic的订阅者消费。注意,如果消息发往Topic中时,当时不存在消息监听者(即,订阅者不处于监听状态),则该消息将丢弃掉。但有一点特殊,如果某订阅者是持久订阅者,则该消息将保留到该持久订阅者消费掉该消息为止。
JMS1.0.2中定义了两种消息类型,即点对点和发布/订阅。在JMS1.1中,将两种的API合二为一为ConnectionFactory。同时,借助JMS1.0.2 API在同一Session中只能够同某类型的目的地经行交互;JMS1.1消除了这种开发限制,在同一个Session中能够同不同类型的目的地进行交互,更好的实现事务管理。
2.Spring对JMS提供的支持
JMS,能够保证客户/服务器间的可靠性,即保证消息消费者、生产者确实消费或者生产了消息。这对于企业应用而言至关重要。可靠性不仅仅需要从应用层面保证,更多的是从系统级、中间层得以保证。现在已经有一些可靠性规范来确保服务质量的可靠性。JMS的服务质量(QoS)对于这种松耦合的架构很重要。无论如何,JMS都是架构大型企业应用的主要利器之一。
对这种优秀的J2EE API,Spring提供了Spring JMS抽象服务。
2.1)JmsTemplate
在Spring框架提供的JMS抽象中,JmsTemplate同MessageCreator结合能够发送消息。开发者需要实现MessageCreator回调接口定义的createMessage方法。
通过JBoss提供的JMX控制台应用,能浏览到发送到JBossMQ的消息内容。
JmsTemplate模版在默认时,使用了P2P目的地类型,通过pubSubDomain属性能够改变目的地类型。
消息驱动Bean是接收消息的最好方式之一。JmsTemplate也支持消息的的接受操作。JmsTemplate提供的receive方法,能实现同步接收消息,通过设定receiveTimeout属性,可以指定线程阻塞的最大时间。使用receive方法接收消息时务必小心!
为了实现消息的异步接收,需要在应用中实现MessageListener接口。
JmsTemplate提供了各种send方法,供发送消息使用。其中,JmsTemplate中的convertAndSend和receiveAndConvert方法能够借助于MessageConverter接口实现将消息做相应的转换。MessageConverter接口定义了Java对象同JMS消息之间的简单约定。Spring框架的JMS抽象提供了MessageConverter的简单实现,即SimpleMessageConverter。借助于SimpleMessageConverter,开发者能够实现String与TextMessage、byte[]与BytesMessage、java.util.Map与MapMessage之间的自动转换。也可以自定义其他的MessageConverter接口实现。通过使用消息转换器,使得开发人员能更专注于业务逻辑,而不用关注JMS消息的具体内容。
默认时,如果不设置JmsTemplate的messageConverter属性,Spring会直接使用JMS抽象服务提供的org.springframework.jms.support.converter.SimpleMessageConverter。然而,为了修改消息本身的内容,用MessageConverter实现不了,需要借助于Spring提供的MessagePostProcessor接口。
2.2)事务管理:
Spring提供了JmsTransactionManager,用于管理单个JMS ConnectionFactory的事务。借助于JtaTransactionManager和具有XA能力的JMS ConnectionManager能够管理全局事务。
分享到:
相关推荐
linux
银行秒杀系统 第十三服创比赛项目
单页登录源码 login登录页源码 html源码
理性力学 陈至达.pdf
JAVA在线考试管理系统(源代码+论文+开题报告+外文翻译+英文文献+答辩PPT)
加州房价预测是一个经典的机器学习案例,旨在通过给定的一些特征来预测加州地区房屋的中位数价格。这个案例通常使用监督学习算法来解决: 其中包括以下步骤: 数据收集:收集加州地区的房屋数据,包括房屋的各种特征,如房屋的位置、面积、卧室数量、人口密度等。 数据预处理:对收集到的数据进行清洗和处理,包括处理缺失值、异常值和重复值,进行特征选择和特征缩放等。 特征工程:根据问题的背景和数据的特点,进行特征工程,提取更有意义和相关性的特征。例如,可以通过计算每个区域的人均收入、房屋间距离海洋的距离等特征。 模型选择:选择适合解决这个问题的机器学习模型。常用的模型包括线性回归、决策树、支持向量机、神经网络等。 模型训练:使用训练数据对选定的模型进行训练,通过调整模型参数来最小化预测误差。 模型评估:使用测试数据对训练好的模型进行评估,常用的评估指标包括均方误差和决定系数等。 模型优化:根据评估结果,对模型进行优化,可以尝试调整模型参数、增加更多的特征、尝试其他算法等。 模型应用:使用优化后的模型进行加州房价的预测,可以输入新的特征数据,得到预测的房价。
web单页html主页老款 旧风格 管理页源码
旅游大数据HTML模板源码 大数据大屏展示源码 VUE
moood UI KitAdobeXD源码下载设计素材UI设计
生物信息学课程学习笔记第四版2022版
在校时,参加的创新创业比赛的项目,我负责前端Vue模块
AProject_Inner_Responsive_TemplatesAdobeXD源码下载设计素材UI设计
基于STM32的智能台灯 项目概述 该智能台灯能够实时监测环境光照强度,并根据环境亮度调整LED灯的亮度,亦可通过面板对台灯进行手动控制,从而实现智能护眼和节能的目的。 功能描述 1.环境感知功能:实时监测环境光照强度 2.信息显示功能:显示亮度等提示信息 3.面板控制功能:模式和光照等级切换 4.远程控制功能:远程开关LED灯 中断级调度任务 1.面板控制任务 2.环境感知任务 3.远程控制任务
HTML4-Desktop-App模板官网落地页APP主页产品宣传页源码 landing静态页面
自己学习机器学习算法过程中写的一些代码,由于换了个方向,暂时没法继续手写实现下去了。
名称 范围 默认参数 系统 ①低功耗系统 ②非低功耗系统 ① 功耗 不广播状态 1uA 广播状态200ms 0.14mA 广播配置 广播间隔时间: 间隔广播(20ms-2000ms) 200ms 广播数据: 设备名称 “Sensor” 制造商数据: FF 前两字节公司ID FFC1 A数据(uint16_t) 1001 B数据(uint16_t) 2001 C数据(uint16_t) 3001 D数据(uint16_t) 4001 E数据(uint16_t) 5001 F数据(uint16_t) 6001 G数据(uint16_t) 7001
因为在我们刷题的过程中,一定可以刷到一些难度很高却十分简单的题,俗话说就是“占着毛肯不拉屎”的水题,下面我就分享几个,因为虽然简单,但难度标准高,所以可以增加等级,刷题量,排名。那是多好的事啊,所以如果你有oj账号,那直接去用。没有没关系,你可以注册一个oj账号,那还等什么,赶紧行动吧!!!!!!!!!
AEM-CoreComponents-UI-KitAdobeXD源码下载设计素材UI设计
电子密码锁使用说明(1).doc
c++语言学生成绩管理文字版.zip;c++语言学生成绩管理文字版.zip;c++语言学生成绩管理文字版.zip