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. [LeetCode] Expressive Words 富于表现力的单词

    Sometimes people repeat letters to represent extra feeling, such as "hello" -> "he ...

  2. 配置ssh框架启动tomcat服务器报异常Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

    在Spring中配置jdbc时,引用的是dbcp.jar包,在db.properties配置文件中,使用了之前的properties配置文件的用户名username(MySql用户名) 然后在启动服务 ...

  3. mysql 5.7.21 解压版安装配置方法图文教程

    引用:https://www.jb51.net/article/140951.htm 1.首先,你要下载MySQL解压版,下载地址,图解: 2.解压安装包,根据自己的喜好选择路径,我选择的路径是C:\ ...

  4. Dynamics 365 解决方案导出报错

    之前导出解决方案异常,按照CRM社区的方法解决成功,但是没有了解原因,今天看到有朋友解答了原因,也分享给大家 先来看看异常 我那时导出的是default解决方案,这是模拟 导出异常 “业务流程错误”- ...

  5. .NET中的泛型集合总结

    最近对集合相关的命名空间比较感兴趣,以前也就用下List<T>, Dictionary<Tkey, TValue>之类,总之,比较小白.点开N多博客,MSDN,StackOve ...

  6. JS数组循环的性能和效率分析(for、while、forEach、map、for of)

    从最简单的for循环说起 for( 初始化:条件; ){} 条件为Trusy 值时候,可以继续执行for 循环,当条件变为Falsy 时跳出for循环.for循环常见的四种写法const person ...

  7. 【Python基础】lpthw - Exercise 41 学习面向对象术语

    一.专有词汇 类(class):告诉python创建新类型的东西. 对象(object):两个意思,即最基本的东西,或者某样东西的实例. 实例(instance):让python创建一个类时得到的东西 ...

  8. oracle学习笔记第二天

    一.连接查询 --笛卡尔积(表 * 表),连接的基础select * from emp,dept;--等值连接select * from emp e,dept d where e.deptno = d ...

  9. nodeJs和JavaScript的异同(转)

    原文:https://blog.csdn.net/lazycode_cat/article/details/61916291 JavaScript组成:ECMAScript(定义这门语言的基础,比如语 ...

  10. Vue学习记录第一天

    今天开始了Vue的学习,下面我就记录一下学习了什么. 1.什么是Vue? vue是一套基于javaScript的渐进式框架,是MVVM框架.View ——ViewModel——Model  其中Vie ...