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

JMS基本构件包括:

受管理对象:连接工厂和目的地

连接

会话

JMSContext对象:它将一个连接和一个对话结合在一个对象中

消息生产者

消息消费者

消息

将这些对象集成在一个JMS对象中:

JMS应用架构由以下几个部分构成:

JMS提供者:是一个实现JMS接口的消息传送系统。提供管理和控制特性。支持全部特性的JAVA EE平台就包括一个JMS提供者。

JMS客户端:是用java语言编写的程序或组件。可以生成(生产)或使用(消费消息)。所有JAVA EE应用组件都可以作为一个JMS客户端。

消息          :是在JMS客户端之间传递信息的对象。

受管理对象:是为客户端配置的JMS对象。有两类JMS受管理对象:目的地和连接工厂。管理员可以创建公共可用的对象。

消息传送方式:

因为在JMS API出来之前,大多数消息传送产品都支持点对点或发布/订阅传送方式。JMS规范为这两种方式都定义了兼容模式。JMS提供者必须实现这两种方式,JMS API还分别提供了这两种方式特定的接口。

点对点消息传送方式:

点对点产品或应用是建立在消息队列、发送者和接受者的概念基础上。建立队列来维护消息,每个消息都发送到特定对列上,接收客户端从这些队列中抽取信息。队列会保留发送给他们的所有消息,知道消息被使用或到期。

点对点消息消息传送的特点:

每个消息都只有一个消费者(即使用方)。

接收者可以获取信息,而不论客户端发送消息时接收者是否正在运行。

点对点消息传送模型:

如果每一个消息都必须由一个消费者成功地处理,就可以使用点对点消息传送。

发送/订阅消息传送方式

在一个发送/订阅产品或应用中,客户端将消息发送到一个主题,它的功能类似于公告板。发布者和订阅者可以动态地向主题发布或订阅。会有多个发布者向主题发送消息,系统将到达主题的消息发布给主题的多个订阅者。主题只是在向订阅者发布消息时才保留消息。

采用发布/订阅消息发布方式时,要区分订阅主题的消费者(订阅者)和所创建消息的订阅,消费者是应用中的一个JMS对象,而订阅是JMS提供者中的一个实体。一般地,一个主题可以有多个消费者,但是一个订阅只有一个订阅者。不过,有可能创建共享地订阅。

发布/订阅消息传送有以下特点:

每个消息可以有多个消费者。

对于订阅一个主题的客户端,只有这个客户端创建一个订阅之后才能使用所发送的消息,消费者必须保持活跃状态才能使用消息。

JMS API允许应用创建持久订阅,利用持久订阅,消费者不活动时也可以接收发送的消息。持久订阅提供了队列的灵活性和可靠性。而且允许客户端向多个接收方发送消息。

如果每个消息可以由任意多个消费者(或者没有任何消费者)处理,就可以使用发布/订阅消息传送方式

发布/订阅消息传送模型:

JMS应用中的两个部分(目的地和连接工厂)通常采用管理方式而不是编程方式来维护。对于JMS的不同实现,这些对象的底层技术可能有很大差别。因此这些对象的管理也会随提供者的不同而不同。

JMS连接工厂:

连接工厂是客户端用来创建连接的对象,客户端可以用它来创建与一个提供者的连接。连接工厂封装了由管理员定义的一组连接配置参数。每个连接工厂是ConnectionFactory、QueueConnectionFactory或TopicConnectionFactory接口的一个实例。

在JMS客户端程序最前面,通常要将一个连接资源注入到一个ConnectionFactory对象。Java EE服务器必须提供一个逻辑JNDI名为 java:comp/DefaultJMSConnectionFactory的JMS连接工厂,实际的JNDI名由具体实现确定。

JMS目的地:

客户端用目的地对象指定所生成消息的目标以及所使用消息的来源。在PTP消息传送方式中 目的地成为队列 。在发布/订阅消息传送方式中,目的地成为主题。JMS队列可以使用对个对象或主题(或者两者都使用)

要使用GlassFish服务器创建一个目的地,可以创建一个JMS目的地资源并为目的地指定一个JNDI名。

在JMS的GlassFish服务器实现中,每个目的地资源指示一个物理服务器,可以显示地创建一个物理目的地,不过如果没有创建物理,应用服务器便会在需要时创建,并在删除目的地资源时将其删除。

除了将连接工厂资源注入到客户端程序外,通常还需要注入一个目的地资源。与连接工厂不同,目的地特定于点对点或发布/订阅消息传送方式。要创建一个允许对主题和队列使用相同代码的应用,需要将目的地赋值给一个Distination对象。

连接:

连接是封装了一个与JMS提供者的虚拟连接。例如,连接可以表示客户端与服务者后台之间的一个打开的TCP/IP socket。在Java EE平台中,只有应用客户端能够为一个连接创建多个会话。在web 和企业bean组件中,一个连接最多只能创建一个会话。通常通过创建JMSContext对象来创建连接。

会话:

会话是生成和使用消息的一个单线程上下文。

通常会通过创建一个JMS对象来创建会话(以及连接)。可以使用会话来创建消息生产者,消息消费者,消息,队列浏览器和临时目的地。

会话将串行化消息监听器地执行。

会话提供了一个事务上下文,利用它将一组接收和发送操作分组到一个原子工作单元。

摘自《Java EE 7权威指南 卷2》

java消息服务学习之JMS概念的更多相关文章

  1. java消息服务学习之JMS高级特性

    将介绍的内容是: 控制消息确认.为发送消息指定选项.创建临时目的地.使用JMS本地事务.异步发送消息 五个方面. 1.控制消息确认 在JMS消息得到确认之前,并不认为它已经成功使用.要成功使用消息,通 ...

  2. MQ消息队列(2)—— Java消息服务接口(JMS)

    一.理解JMS   1.什么是JMS?         JMS即Java消息服务(Java Message Service)应用程序接口,API是一个消息服务的标准或者说是规范,允许应用程序组件基于J ...

  3. Java消息服务

    什么是消息? 消息是可编程实现两端通信的机制.通常的一些消息技术如:TCP/IP Sockets.管道.文件.共享存储. Java消息服务 Java消息服务,即Java Message Service ...

  4. ActiveMQ学习总结(5)——Java消息服务JMS详解

    JMS: Java消息服务(Java Message Service) JMS是用于访问企业消息系统的开发商中立的API.企业消息系统可以协助应用软件通过网络进行消息交互. JMS的编程过程很简单,概 ...

  5. JMS(Java消息服务)入门教程

    什么是Java消息服务 Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建.发送.读取消息等,用于支持JAVA应用程序开发.在J2EE中 ...

  6. 【转载】JAVA消息服务JMS规范及原理详解

    转载:https://www.cnblogs.com/molao-doing/articles/6557305.html 作者: moyun- 一.简介 JMS即Java消息服务(Java Messa ...

  7. JAVA消息服务JMS规范及原理详解

    JAVA消息服务JMS规范及原理详解 一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应 ...

  8. Java消息队列ActiveMQ (一)--JMS基本概念

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

  9. Java消息服务初步学习(基于Spring In Action的整理)

    几个名词 Java消息服务(Java Message Service)是一个Java标准,定义了使用消息代理的通用API. 消息代理(message broker):类似于邮局的作用,确保消息被投递到 ...

随机推荐

  1. three.js 使用DragControls.js 拖动元素

    首先,引入js文件: <script type="text/javascript" src="./path/to/DragControls.js"> ...

  2. Spring Boot 引入org.springframework.boot.SpringApplication出错

    今天新建的一个spring boot maven项目, 写启动类时发现无法引入SpringApplication, 经查原来是冲突了,我早些时候用了比较低版本的spring boot创建了项目 ,导致 ...

  3. Source Insight4

    创建工程: File->open                        打开创建的工程 同步文件: 方便跟踪 Project->Synchronize   Files 打开小窗口 ...

  4. 加密传输:每位数字+6,然后用除以9的余数代替该数字, 在把第一位和第四位交换,第二位和第三位交换,例如3276->3840

    /** * @author:(LiberHome) * @date:Created in 2019/3/6 10:00 * @description: * @version:$ */ /*今日目标:5 ...

  5. linux下安装前端程序员必备软件

    startx进入桌面后,ctrl+alt+t调出终端.安装完成以后重启在软件ubuntu软件中找到软件启动或通过终端输入命令找到,锁定到启动器. 1.首先安装chrome(64位) cd    /tm ...

  6. Selenium 3 学习小结

    4个类+常用的46个方法 从以下知识内容对selenium 3自动化框架进行初步学习: 1.安装selenium pip install selenium pip list 2.驱动.关闭浏览器 首先 ...

  7. 01背包 || BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草 || Luogu P2925 [USACO08DEC]干草出售Hay For Sale

    题面:P2925 [USACO08DEC]干草出售Hay For Sale 题解:无 代码: #include<cstdio> #include<cstring> #inclu ...

  8. radio选中与不选中

    $("input[name='bankCardType']").val("sdf"); $('input:radio[name="bankCardTy ...

  9. Akka并发编程框架 -概念模型(Akka.net或者Orleans)

    Akka 来构建具备高容错性.可以横向扩展的分布式网络应用程序. Akka 通常是指一个强大的分布式工具集,用于协调远程计算资源来进行一些工作 Akka 工具集以及Actor 模型的介绍. Actor ...

  10. Python全局变量和局部变量相关知识点

    知识点一: #在函数外面定义的变量叫全局变量 num = 100 def AAA(): ''' 如果在函数中直接修改全局变量,那么会产生异常 如果真的需要修改,可以在函数中进行声明(前面加入globa ...