java消息服务学习之JMS概念
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概念的更多相关文章
- java消息服务学习之JMS高级特性
将介绍的内容是: 控制消息确认.为发送消息指定选项.创建临时目的地.使用JMS本地事务.异步发送消息 五个方面. 1.控制消息确认 在JMS消息得到确认之前,并不认为它已经成功使用.要成功使用消息,通 ...
- MQ消息队列(2)—— Java消息服务接口(JMS)
一.理解JMS 1.什么是JMS? JMS即Java消息服务(Java Message Service)应用程序接口,API是一个消息服务的标准或者说是规范,允许应用程序组件基于J ...
- Java消息服务
什么是消息? 消息是可编程实现两端通信的机制.通常的一些消息技术如:TCP/IP Sockets.管道.文件.共享存储. Java消息服务 Java消息服务,即Java Message Service ...
- ActiveMQ学习总结(5)——Java消息服务JMS详解
JMS: Java消息服务(Java Message Service) JMS是用于访问企业消息系统的开发商中立的API.企业消息系统可以协助应用软件通过网络进行消息交互. JMS的编程过程很简单,概 ...
- JMS(Java消息服务)入门教程
什么是Java消息服务 Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建.发送.读取消息等,用于支持JAVA应用程序开发.在J2EE中 ...
- 【转载】JAVA消息服务JMS规范及原理详解
转载:https://www.cnblogs.com/molao-doing/articles/6557305.html 作者: moyun- 一.简介 JMS即Java消息服务(Java Messa ...
- JAVA消息服务JMS规范及原理详解
JAVA消息服务JMS规范及原理详解 一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应 ...
- Java消息队列ActiveMQ (一)--JMS基本概念
摘要:The Java Message Service (JMS) API is a messaging standard that allows application components bas ...
- Java消息服务初步学习(基于Spring In Action的整理)
几个名词 Java消息服务(Java Message Service)是一个Java标准,定义了使用消息代理的通用API. 消息代理(message broker):类似于邮局的作用,确保消息被投递到 ...
随机推荐
- three.js 使用DragControls.js 拖动元素
首先,引入js文件: <script type="text/javascript" src="./path/to/DragControls.js"> ...
- Spring Boot 引入org.springframework.boot.SpringApplication出错
今天新建的一个spring boot maven项目, 写启动类时发现无法引入SpringApplication, 经查原来是冲突了,我早些时候用了比较低版本的spring boot创建了项目 ,导致 ...
- Source Insight4
创建工程: File->open 打开创建的工程 同步文件: 方便跟踪 Project->Synchronize Files 打开小窗口 ...
- 加密传输:每位数字+6,然后用除以9的余数代替该数字, 在把第一位和第四位交换,第二位和第三位交换,例如3276->3840
/** * @author:(LiberHome) * @date:Created in 2019/3/6 10:00 * @description: * @version:$ */ /*今日目标:5 ...
- linux下安装前端程序员必备软件
startx进入桌面后,ctrl+alt+t调出终端.安装完成以后重启在软件ubuntu软件中找到软件启动或通过终端输入命令找到,锁定到启动器. 1.首先安装chrome(64位) cd /tm ...
- Selenium 3 学习小结
4个类+常用的46个方法 从以下知识内容对selenium 3自动化框架进行初步学习: 1.安装selenium pip install selenium pip list 2.驱动.关闭浏览器 首先 ...
- 01背包 || BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草 || Luogu P2925 [USACO08DEC]干草出售Hay For Sale
题面:P2925 [USACO08DEC]干草出售Hay For Sale 题解:无 代码: #include<cstdio> #include<cstring> #inclu ...
- radio选中与不选中
$("input[name='bankCardType']").val("sdf"); $('input:radio[name="bankCardTy ...
- Akka并发编程框架 -概念模型(Akka.net或者Orleans)
Akka 来构建具备高容错性.可以横向扩展的分布式网络应用程序. Akka 通常是指一个强大的分布式工具集,用于协调远程计算资源来进行一些工作 Akka 工具集以及Actor 模型的介绍. Actor ...
- Python全局变量和局部变量相关知识点
知识点一: #在函数外面定义的变量叫全局变量 num = 100 def AAA(): ''' 如果在函数中直接修改全局变量,那么会产生异常 如果真的需要修改,可以在函数中进行声明(前面加入globa ...