JMS Provider

实现了JMS规范的消息系统,该系统还提供必须的用于管理和控制全方位的功能,如这里的ActiveMQ。

Administered Objects

Administered Objects是预先配置的JMS对象,由系统管理员为使用JMS的客户端创建,如ConnectionFactory、Destination。JMS被管理的对象是包含JMS配置信息的对象,这些对象由JMS管理者创建,并且最终由JMS客户端使用。

由于有很多JMS消息系统,它们的底层实现技术各不相同,比如Sun MQ、IBM MQ、BEA MQ、Apache ActiveMQ,那么如何使得JMS客户端针对这些消息系统编程时能够隔离这些产品的变化而具有跨平台特性呢?就是通过定义被管理的对象来实现。被管理的对象是由管理员通过使用JMS系统提供者的管理工具创建和定制,然后被JMS客户端使用。JMS客户端通过接口来调用这些被管理的对象,从而具备跨平台特性。

主要有两个被管理的对象:ConnectionFactory、Destination

ConnectionFactory

这是客户端用来创建同JMS服务提供者之间的连接的对象。

Destination

这个对象是客户端用来指明消息被发送的目的地以及客户端接收消息的来源。被管理的对象一般被管理员放在JNDI名字空间中,通常在JMS客户端应用的文档中说明它所需要的JMS被管理对象,以及应以何种JNDI名字来提供这些JMS被管理对象。

JMS客户端

这些客户端程序通过使用JMS提供的API,来创建发送和接收消息的Java语言程序,即消息生产者和消息消费者。

消息生产者

客户端使用MessageProducer向目的地发送消息。用Queue或者Topic对象作为参数来调用session对象的createProducer方法来创建MessageProducer。

客户端也可以选择创建没有目的地的生产者。这种情况下,目的地对象必须传给每个发送操作。这种方式的一个典型用法就是生产者被用来发送回复请求时,使用请求的JMSReplyTo目的地。

客户端可指定由生产者发出的消息的缺省的传送模式、优先级、存活周期。每次客户端创建MessageProducer,它就定义了新的消息系列,这些消息与以前发送的消息没有顺序关系。

消息消费者

客户端使用MessageConsumer接受来自于目的地的消息,MessageConsumer通过向Session的createConsumer方法传递Queue或Topic来创建。

消费者可以被带有消息选择器的方式来创建。这使得客户端可以限制传送给消费者的消息必须同选择器相匹配。客户端既可以同步获取消费者的消息,也可以使提供者在消息到达时异步传送消息。

Synchronous Delivery 同步传送

客户端可以使用MessageConsumer的receive方法请求下一个来自于MessageConsumer的消息。Receive有几种变化允许客户端poll或者wait下一个消息。

Asynchronous Delivery 异步传送

客户端可以注册一个用MessageConsumer来实现JMS MessageListener接口的对象。当消息达到了消费者时,提供者通过调用监听器的onMessage方法来传送它们。可能监听器会抛出RuntimeException异常,但是这主要考虑到的是客户端程序错误。良好的监听器应当捕捉这些异常并且尝试将这些消息转向发给一些应用指定的某些形式的“不可处理消息”的目的地。

监听器抛出RuntimeException的结果取决于会话的确认模式:

n AUTO_ACKNOWLEDGE or DUPS_OK_ACKNOWLEDGE

消息将被立即重发。在放弃之前的重发的次数取决于提供商。在这种情况下,JMSRedelivered 消息头字段将设置在被重发的消息中。

n CLIENT_ACKNOWLEDGE

监听器的下一个消息将被传送。如果客户端希望是前面未确认的消息重新发送,它必须手工恢复会话。

n Transacted Session

监听器的下一个消息被发送,客户端可以提交或者回滚会话。(换句话说,RuntimeException不会导致会话的自动回滚)JMS服务提供者应当将消息监听器抛出异常的客户端标记为“可能的障碍”。

Message

用于在客户端之间进行通讯的消息,消息系统的核心当然是消息。JMS 为不同类型的内容提供了几种消息类型,但所有消息都是从 Message 接口派生出来的。

消息类型

说明

常用方法概览

TextMessage

文本消息

getText,setText

MapMessage

映射消息

setString,getString

BytesMessage

字节消息

writeBytes,readBytes

StreamMessage

流消息

writeString,readString

ObjectMessage

对象消息

setObject,getObject

表 常用消息类

Message 分为三个组成部分:

Header

是一组标准字段,客户机和提供者都用它们来标识和路由消息。

Properties

提供了一个给消息添加可选标题字段的实用工具。如果应用程序需要用标准标题字段没有提供的方法对消息进行归类或分类,那么可以为消息添加一个属性来实现这种归类和分类;提供了 setProperty(...) 和 getProperty(...) 方法来设置和获得各种 Java 类型的属性,其中包括 Object。JMS 定义了提供者可以选择性提供的一组标准属性。

Body

包含将发送到接收应用程序的内容。每一个消息接口都专用于它所支持的内容类型。

下面列出了 Message 的每一个标题字段的名称、它对应的 Java 类型和字段的描述:

JMSMessageID——类型为 string

惟一标识提供者发送的每一条消息。这个字段是在发送过程中由提供者设置的,客户机只能在消息发送后才能确定消息的 JMSMessageID。

JMSDestination——类型为 Destination

消息发送的 Destination,在发送过程中由提供者设置。

JMSDeliveryMode—类型为 int

包含值 DeliveryMode.PERSISTENT 或者 DeliveryMode.NON_PERSISTENT。持久性消息被传输并且只被传输一次,非持久性消息最多被传输一次。要知道“最多一次”包括根本不传输。非持久性消息在应用程序或者系统出故障时被提供者弄丢。因此要格外小心,确保持久性消息不受故障的影响。这比开销通常被认为是发送持久性消息方面的开销,在决定消息的发送模式时,必须仔细考虑,在可靠性和性能之间进行权衡。

JMSTimestamp——类型为 long

提供者发送消息的时间,由提供者在发送过程中设置。

JMSExpiration——类型为 long

消息失效的时间。这个值是在发送过程中计算的,是发送方法的生存时间(time-to-live)值和当前时间值的和。提供者不应发送过期的消息。值 0 表明消息不会过期。

JMSPriority——类型为 int

消息的优先级,由提供者在发送过程中设置。优先级 0 的优先级最低,优先级 9 的优先级最高。

JMSCorrelationID——类型为 string

通常用来链接响应消息与请求消息,由发送消息的 JMS 程序设置。响应来自另一个 JMS 程序的消息的 JMS 程序将正响应消息的 JMSMessageID 拷贝到这个字段中,这样,正作出响应的程序就可以与它所发出的特定请求的响应相关联。

JMSReplyTo—类型为 Destination

请求程序用它来指出回复消息应发送的地方,由发送消息的 JMS 程序设置。

JMSType—类型为 string

JMS 程序用它来指出消息的类型。一些提供者维护着一个消息类型仓库,并用该字段引用仓库中的定义类型,在这里,JMS 程序不应该使用这个字段。

JMSRedelivered——类型为 boolean

指出消息被过早地发送给了 JMS 程序,程序不知道消息的接收者是谁;由提供者在接收过程中设置。

深入浅出JMS(二)——JMS的组成相关推荐

  1. 深入浅出JMS(二)–ActiveMQ简单介绍以及安装(转载)

    现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JM ...

  2. 【JMS】JMS详解

    一.JMS介绍 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或者在分布式系统中发 ...

  3. 【Java.JMS】JMS基础

    JMS基本概念 JMS 是 SUN 公司开发的一套访问 MOM(Message-Oriented-Middleware) 消息服务中间件的标准 API. MOM 提供消息接收和转发的服务,对消息进行缓 ...

  4. JMS之——JMS简介

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/68962304 jms即Java消息服务(Java Message Service) ...

  5. jQuery深入浅出(二)石头剪刀布动画实现

    jQuery深入浅出(二)-石头剪刀布动画实现 1.准备几张可爱的照片素材 2.代码实现 3. 动画效果图 1.准备几张可爱的照片素材 (1)bu.png (2)jaindao.png (3)shit ...

  6. ActiveMQ学习笔记(二) JMS与Spring

    上文可见,JMS Native API使用起来不是特别方便.好在Spring提供了很好的JMS支持. (一)配置ConnectionFactory  如果使用连接池的话,不要忘记activemq-po ...

  7. Spring整合JMS(二)——消息监听器

    消息监听器 在Spring整合JMS的应用中我们在定义消息监听器的时候一共能够定义三种类型的消息监听器,各自是MessageListener.SessionAwareMessageListener和M ...

  8. 深入浅出JMS(一)–JMS基本概念(转载)

    摘要:The Java Message Service (JMS) API is a messaging standard that allows application components bas ...

  9. 深入浅出CMake(二): 基础语法

    在<深入浅出CMake(一):基础篇>文章中,我们已经知道了怎么依葫芦画瓢编写简单的 CMake 构建文件了,但如果应对复杂的工程的话,这还是远远不够的. CMake 是一套编译构建体系, ...

  10. 【JMS】JMS支持的模式讲解

    介绍 JMS,Java消息服务应用程序接口,全程为Java Message Service,是一个Java平台中关于面向消息中间件的API框架,用在两个应用程序之间或分布式系统中发送消息,整体的功能有 ...

最新文章

  1. dispatch callback ant design pro 网络请求回调函数
  2. Mock session,cookie,querystring in ASB.NET MVC
  3. httpd启动不能加载模块
  4. spring在WEB中的应用。
  5. [tomcat]-tomcat8启动时SessionIdGeneratorBase.createSecureRandom耗时
  6. Nginx配置同时适配电脑和移动端设备
  7. SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装
  8. 计算机用语优秀怎么算,计算机专业用语
  9. bzoj 1151: [CTSC2007]动物园zoo
  10. centos7开启tcp6_centos中docker映射出来的端口被tcp6监听,而没有被tcp监听导致ip+端口无法进行访问...
  11. HTTP 协议 - 简单谈谈 TCP / IP (一)
  12. SCSI代码分析(2)SCSI设备的管理1
  13. pano2vr 缩略图添加场景名称
  14. pgsql在连接的时候报:不支援 10 验证类型。请核对您已经组态。。。
  15. sql server无法用sql server身份验证
  16. 下班前几分钟,我彻底弄懂了并查集
  17. 传感器的使用_手柄_3、ros使用罗技f710无线控制手柄
  18. 艺赛旗RPA验证码处理系列(三):破解极验滑动验证码
  19. 【数学】有效的正方形 勾股定理
  20. 移动电源/便携式汽车应急启动电源UKCA/CE认证

热门文章

  1. 华为MIB关键字IOD查询地址及方法
  2. WIFI AP和STATION
  3. 聊聊P2P网贷平台的风险【站在平台的角度】
  4. ​从小样本学习出发,奔向星辰大海
  5. 【面试】MyBatis面试题
  6. 华为中标广东电信IPTV项目
  7. 虚拟机Ubuntu18.04开机后没有网络的解决办法
  8. LVGL V0.01版本移植到STM32F4
  9. 梯度是什么,简单说梯度下降是什么
  10. 九龙证券|游戏板块或继续迎来业绩估值“戴维斯双击”