JMS基本概念

2 篇文章 0 订阅
订阅专栏

简介


        JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

        JMS是一种与厂商无关的 API,用来访问消息收发系统消息,它类似于JDBC(Java Database Connectivity)。这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商都支持 JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ。 JMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个 JMS客户机发送消息。消息是 JMS 中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载的类型来划分,可以将消息分为几种类型,它们分别携带:简单文本(TextMessage)、可序列化的对象 (ObjectMessage)、属性集合 (MapMessage)、字节流 (BytesMessage)、原始值流 (StreamMessage),还有无有效负载的消息 (Message)。


专业技术规范


        JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。


体系架构


        JMS提供者: 连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。

        JMS客户:     生产或消费基于消息的Java的应用程序或对象。

        JMS生产者: 创建并发送消息的JMS客户。

        JMS消费者: 接收消息的JMS客户。

        JMS消息:     包括可以在JMS客户之间传递的数据的对象。

        JMS队列:     一个容纳那些被发送的等待阅读的消息的区域。与队列名字所暗示的意思不同,消息的接受顺序并不一定要与消息的发送顺序相同。一旦一个消息被阅读,该消息将被从队列中移走。

        JMS主题:     一种支持发送消息给多个订阅者的机制。


对象模型


        连接工厂: 连接工厂(ConnectionFactory)是由管理员创建,并绑定到JNDI树中。针对两种不同的jms消息模型,分别有QueueConnectionFactory和TopicConnectionFactory两种。客户端使用JNDI查找连接工厂,然后利用连接工厂创建一个JMS连接。

        JMS连接:  JMS连接(Connection)表示JMS客户端和服务器端之间的一个活动的连接,是由客户端通过调用连接工厂的方法建立的。Connection表示在客户端和JMS系统之间建立的链接(对TCP/IP socket的包装)。Connection可以产生一个或多个Session。跟ConnectionFactory一样,Connection也有两种类型:QueueConnection和TopicConnection。

        JMS会话:  JMS会话(Session)表示JMS客户与JMS服务器之间的会话状态。JMS会话建立在JMS连接上,表示客户与服务器之间的一个会话线程。Session是我们操作消息的接口。可以通过session创建生产者、消费者、消息等。Session提供了事务的功能。当我们需要使用session发送/接收多个消息时,可以将这些发送/接收动作放到一个事务中。同样,也分QueueSession和TopicSession。

        JMS目的: JMS目的(Destination),又称为消息队列,是实际的消息源。Destination的意思是消息生产者的消息发送目标或者说消息消费者的消息来源。对于消息生产者来说,它的Destination是某个队列(Queue)或某个主题(Topic);对于消息消费者来说,它的Destination也是某个队列或主题(即消息来源)。

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

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

        消息监听器: 如果注册了消息监听器(MessageListener),一旦消息到达,将自动调用监听器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一种MessageListener。


消息模型


(一). 点对点模型


        点对点(Point-to-Point)。在点对点的消息系统中,消息分发给一个单独的使用者。点对点消息往往与队列(javax.jms.Queue)相关联。


1. P2P模式图



2. 涉及到的概念


  • 消息队列(Queue)
  • 发送者(Sender)
  • 接收者(Receiver)


3. P2P的特点


  • 每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。
  • 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
  • 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列
  • 接收者在成功接收消息之后需向队列应答成功

       如果你希望发送的每个消息都应该被成功处理的话,那么你需要P2P模式。


4. 消息的消费


        在这种模式下消息的产生和消费是异步的。就是说生产和消费可以不同时发生,生产的消息在队列中,等消费者上线之后可以消费。对于消费来说,JMS的消费者可以通过两种方式来消费消息。 

  • 同步: 接收者调用receive方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直阻塞
  • 异步: 接收者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法。


(二). 发布/订阅模型


        发布/订阅消息系统支持一个事件驱动模型,消息生产者和消费者都参与消息的传递。生产者发布事件,而使用者订阅感兴趣的事件,并使用事件。该类型消息一般与特定的主题(javax.jms.Topic)关联。


1. Pub/Sub模式图



2. 涉及到的概念 


  • 主题(Topic)
  • 发布者(Publisher)
  • 订阅者(Subscriber) 


3. Pub/Sub的特点


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

        如果你希望发送的消息可以不被做任何处理、或者被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型


4. 消息的消费

        

        在这种模式下,也可以说消息的发布与订阅是异步的,但是要求先订阅,然后订阅者才能收到发布者发布的消息。对于订阅者来说,JMS的订阅者可以通过两种方式来消费消息。

  • 同步: 订阅者调用receive方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直阻塞
  • 异步: 订阅者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法。


传递方式


        JMS有两种传递消息的方式。

  • 标记为NON_PERSISTENT的消息最多投递一次
  • 标记为PERSISTENT的消息将使用暂存后再转送的机理投递。

        如果一个JMS服务离线,那么持久性消息不会丢失但是得等到这个服务恢复联机时才会被传递。所以默认的消息传递方式是非持久性的。即使使用非持久性消息可能降低内务和需要的存储器,并且这种传递方式只有当你不需要接收所有的消息时才使用。

        虽然JMS规范并不需要JMS供应商实现消息的优先级路线,但是它需要递送加快的消息优先于普通级别的消息。JMS定义了从0到9的优先级路线级别,0是最低的优先级而9则是最高的。更特殊的是0到4是正常优先级的变化幅度,而5到9是加快的优先级的变化幅度。

        举例来说: 

//Pub-Sub
topicPublisher.publish (message, DeliveryMode.PERSISTENT, 8, 10000);   

//或

//P2P 
queueSender.send(message,DeliveryMode.PERSISTENT, 8, 10000);

        这个代码片断,有两种消息模型,映射递送方式是持久的,优先级为加快型,生存周期是10000 (以毫秒度量)。如果生存周期设置为零,这则消息将永远不会过期。当消息需要时间限制否则将使其无效时,设置生存周期是有用的。

        JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。

  • StreamMessage  --    Java原始值的数据流
  • MapMessage       --    一套名称-值对
  • TextMessage       --    一个字符串对象
  • ObjectMessage   --    一个序列化的 Java对象
  • BytesMessage    --    一个未解释字节的数据流


参考:


深入浅出JMS(一)--JMS基本概念

JMS

Apache RocketMQ之JMS基本概念及使用
挂机的阿洋zzZ
12-23 3883
Apache RocketMQ之JMS基本概念及使用 优秀博客: https://blog.csdn.net/canot/article/details/53676350 https://blog.csdn.net/caidaoqq/article/details/45938919 https://blog.csdn.net/u013123635/article/details/7836236...
jms基本用法
03-15
了解了JMS基本概念和用法后,开发者可以根据具体需求选择合适的消息模型和实现,利用JMS构建健壮、高效的企业级应用。在实际项目,通常还需要结合其他工具和框架,如Spring JMS,来简化配置和使用过程。总之,...
JMS
05-24
NULL 博文链接:https://bozhi521.iteye.com/blog/363812
JMS基本概念
海恋北斗星
08-09 332
                                      JMS基本概念 JMS是什么? JMS Java Message Service, Java 消息服务,是javaEE的一项技术。 JMS规范 JMS定义了Java访问消息间件的接口,并没有给予实现,实现JMS接口的消息间件称为 JMS Provider,例如ActiveMQ。 JMS Provide...
Java消息服务(JMS)第二版:概念、实践与源码分析
最新发布
weixin_35238815的博客
09-12 756
本文还有配套的精品资源,点击获取 简介:Java消息服务(JMS)是一种Java平台企业级应用集成的API标准,允许异步可靠的消息传递。它涉及消息生产者、消费者、代理等核心概念,并定义了点对点和发布/订阅两种消息模型。JMS提供不同类型的消息以适应不同数据格式,并支持事务和持久性,确保数据安全。书源码演示了JMS API的使用和配置,旨在帮助读者深入理解JMS的应用,并通...
理解ActiveMQJMS基本概念
总结来说,ActiveMQ_in_Action_文版是学习JMS和ActiveMQ的宝贵资料,涵盖了JMS基本概念、ActiveMQ的核心功能,以及如何在实际项目有效使用这些工具进行消息传递。通过深入理解和实践,开发者可以更好地掌握...
"学习JMS规范:Java消息服务基本概念和实践指南
JMS基本概念包括了JMS消息、消息发送方和消息接收方之间的通信机制。在JMS,消息被发送到一个消息队列或主题,然后消息接收方可以从队列或主题接收消息。 在JMS规范教程,介绍了JMS基本概念和实现方法。...
WebLogic基本概念介绍PPT课件
10-20
本篇内容将深入讲解WebLogic的基本概念,包括其架构、相关术语以及在分布式系统的角色。 首先,分布式系统是从传统的客户端-服务器(CS)结构演变而来的,为了解决CS结构在扩展性、维护性和性能上的局限,分布式...
JMSJMSJMSJMS
06-11
JMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMSJMS
JMS-任务管理系统
07-16
该项目用于研究和测试HTML5以及CSS3的功能和特效 该项目采用的是S2SH架构以及mysql数据库 并且会有一份详细的使用文档以及安装文档供各位研究和学习 该项目会作为一个完全免费且开源的项目存在并使用 在天府软件园工作了一段时间,挺羡慕那些有开源精神的人 也许项目一般 但是有自己很多的创意和灵感 以后会完善该项目的报表功能 或者谁有好的idea也可以联系我 当然 你们有兴趣 也可以接着改项目进行开发
JMS学习一(JMS介绍)
热门推荐
bit-cafe
02-16 3万+
一、JMS是什么个鬼 二、为什么要学习,使用JMS 三、JMS有什么优势 四、JMS消息传送模型 五、接收消息 六、JMS编程接口 七、JMS消息结构 八、JMS使用示例 九、链接
深入浅出JMS(一)--JMS基本概念
dawuafang
06-30 975
摘要:The Java Message Service (JMS) API is a messaging standard that allows application components based on the Java Platform Enterprise Edition (Java EE) to create, send, receive, and read messages...
写文章

热门文章

  • Linux 端口转发 端口映射 183429
  • Java 调用Restful API接口的几种方式--HTTPS 53413
  • Tomcat 报错 (The tomcat server configuration at /Servers/Tomcat v7.0 Server at localhost-config is mi) 53411
  • JAVA HashSet 去除重复值原理 35167
  • su incorrect password问题 su无法切换用户问题 以及权限s、t、i、a补充 34167

分类专栏

  • 笔记
  • AWS 1篇
  • Drools
  • R 1篇
  • 机器学习 1篇
  • Struts2 18篇
  • Jquery 31篇
  • JDBC 5篇
  • 计算机故障 10篇
  • HTML+CSS+JS 6篇
  • Java 54篇
  • 开发工具使用 12篇
  • Spring 5篇
  • 数据库 12篇
  • 流程控制 3篇
  • Hibernate 28篇
  • Junit 1篇
  • JFrameChart(报表制作) 1篇
  • Linux 21篇
  • PHP 10篇
  • Android 22篇
  • Maven 7篇
  • GWT 1篇
  • Memcached 4篇
  • MyBatis 3篇
  • XML 2篇
  • Lucene 4篇
  • Python 8篇
  • Tomcat 3篇
  • Elasticsearch 9篇
  • Backbone 1篇
  • Gradle 2篇
  • TED
  • Hadoop 14篇
  • Hive 4篇
  • Hazelcast 2篇
  • JMS 2篇
  • ExtJS
  • Redis
  • Nginx 1篇
  • Impala 1篇
  • 网络 2篇
  • GIT 4篇
  • Spark 23篇
  • Airflow 1篇
  • Scala 2篇

最新评论

  • Thread类中的join()方法原理

    ggyoujian: https://blog.csdn.net/kongfanyu/article/details/109639616 请观摩(反例)

  • Thread类中的join()方法原理

    ggyoujian: 您这篇标注了转载,且根据您的整理后,逻辑是对的,有个人和您排版一样,没有标注转载,它保留了一些原文,导致逻辑不对,有点可笑了

  • Anaconda 安装R环境,安装Package和配置镜像,R语言Helloworld程序

    mantle2014: conda就是我的神!!!没有你我怎么活啊!!!谢谢作者分享,终于安上了

  • Anaconda 安装R环境,安装Package和配置镜像,R语言Helloworld程序

    mantle2014: 有的呀,安装的不就是解释器嘛,输入R就可以打开了

  • MAPE(Mean Absolute Percentage Error)和WMAPE有何不同,为什么用WMAPE来评估销量预测

    SuasyYi: 写得很棒!

大家在看

  • VidEgoThink:评估具身智能以自我中心的视频理解能力 509
  • P21 神经网络-搭建小实战和序列Sequential的使用
  • P22 神经网络-损失函数Loss Functions与反向传播backward 26

最新文章

  • Hive 添加分区(partition)后count 为0
  • 理解Pandas的Transform
  • BroadcastNestedLoopJoin和禁不掉的广播
2022年2篇
2021年17篇
2020年8篇
2019年23篇
2018年20篇
2017年15篇
2016年36篇
2015年53篇
2014年31篇
2013年83篇
2012年44篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家秦皇岛玻璃钢雕塑材料玻璃钢佛像雕塑的种类划算的玻璃钢人物雕塑广西玻璃钢雕塑艺术小品吉林创意玻璃钢雕塑供应商佛山卡通玻璃钢雕塑定制艺术玻璃钢雕塑企业玻璃钢海洋雕塑哪家合适武侯玻璃钢卡通雕塑商场美陈一般多少钱泰州红色玻璃钢花盆杏坛玻璃钢人物雕塑工艺精湛东莞百货商场美陈上海镜面玻璃钢雕塑询问报价山西佛像玻璃钢雕塑批发北京市商场美陈价格宿州园林玻璃钢雕塑制作江苏玻璃钢雕塑品牌东莞玻璃钢卡通雕塑定做稳定的玻璃钢卡通雕塑邯郸标牌标识玻璃钢人物雕塑江苏镜面玻璃钢雕塑报价不锈钢和玻璃钢雕塑造价商场美陈比赛方案ppt河北户外商场美陈销售公司沈阳玻璃钢雕塑修复玻璃钢动物牛雕塑厂家定制玻璃钢仿铜雕塑生产厂家商场美陈软装气球商场美陈装饰哪里好香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化