`

JMS

    博客分类:
  • java
jms 
阅读更多
摘要: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. It enables distributed communication that is loosely coupled, reliable, and asynchronous.

JMS(JAVA Message Service,java消息服务)API是一个消息服务的标准或者说是规范,允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分布式通信耦合度更低,消息服务更加可靠以及异步性。
这篇博文我们主要介绍J2EE中的一个重要规范JMS,因为这个规范在企业中的应用十分的广泛,也比较重要,我们主要介绍JMS的基本概念和它的模式,消息的消费以及JMS编程步骤。

基本概念

JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。

消息模型

○ Point-to-Point(P2P)
○ Publish/Subscribe(Pub/Sub)
即点对点和发布订阅模型

P2P

P2P模式图
这里写图片描述
涉及到的概念
消息队列(Queue)
发送者(Sender)
接收者(Receiver)
每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。
P2P的特点

每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列
接收者在成功接收消息之后需向队列应答成功
如果你希望发送的每个消息都应该被成功处理的话,那么你需要P2P模式。

Pub/Sub

Pub/Sub模式图
这里写图片描述
涉及到的概念
主题(Topic)
发布者(Publisher)
订阅者(Subscriber)
客户端将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。
Pub/Sub的特点

每个消息可以有多个消费者
发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。
为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
如果你希望发送的消息可以不被做任何处理、或者被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型

消息的消费
在JMS中,消息的产生和消息是异步的。对于消费来说,JMS的消息者可以通过两种方式来消费消息。
○ 同步
订阅者或接收者调用receive方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直阻塞
○ 异步
订阅者或接收者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法。

JMS编程模型

(1) ConnectionFactory

创建Connection对象的工厂,针对两种不同的jms消息模型,分别有QueueConnectionFactory和TopicConnectionFactory两种。可以通过JNDI来查找ConnectionFactory对象。

(2) Destination

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

所以,Destination实际上就是两种类型的对象:Queue、Topic可以通过JNDI来查找Destination。

(3) Connection

Connection表示在客户端和JMS系统之间建立的链接(对TCP/IP socket的包装)。Connection可以产生一个或多个Session。跟ConnectionFactory一样,Connection也有两种类型:QueueConnection和TopicConnection。

(4) Session

Session是我们操作消息的接口。可以通过session创建生产者、消费者、消息等。Session提供了事务的功能。当我们需要使用session发送/接收多个消息时,可以将这些发送/接收动作放到一个事务中。同样,也分QueueSession和TopicSession。

(5) 消息的生产者

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

(6) 消息消费者

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

(7) MessageListener

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

企业消息系统的好处

我们先来看看下图,应用程序A将Message发送到服务器上,然后应用程序B从服务器中接收A发来的消息,通过这个图我们一起来分析一下JMS的好处:
这里写图片描述

提供消息灵活性
松散耦合
异步性
对于JMS的基本概念我们就介绍这么多,下篇博文介绍一种JMS的实现。
分享到:
评论

相关推荐

    javax.jms.jar

    Classes contained in javax.jms.jar: javax.transaction.xa.XAResource.class javax.jms.BytesMessage.class javax.jms.Message.class javax.jms.JMSException.class javax.jms.Destination.class javax.jms....

    PDS-17001_JMS583_Datasheet_(Rev._1.0)_JMS583_jmicron_jms583开发_

    **JMS583芯片详解** JMS583是一款由JMicron科技公司设计的高性能USB 3.1 Gen 2至PCIe Gen3x2桥接芯片,旨在为存储设备提供高速数据传输能力。这款芯片是针对现代数据密集型应用而优化的,如SSD固态硬盘和外部存储...

    java.jms.jar JMS需要的JAR包

    `javax.jms.jar` 文件中包含了如`javax.jms.Queue`, `javax.jms.Topic`, `javax.jms.MessageProducer`, `javax.jms.MessageConsumer`, `javax.jms.ConnectionFactory`等关键接口,以及其他辅助类和异常类,开发者...

    jms-1.1.jar(jms工具jar包)

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。它提供了一种可靠的消息传递机制,允许应用程序创建、发送、接收和读取消息。`jms-1.1.jar` 是一个包含了JMS 1.1...

    javax.jms包,sun的JMS接口规范包

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用集成的API,它定义了一组标准接口,允许应用程序创建、发送、接收和读取消息。`javax.jms`包是JMS规范的核心部分,包含了各种与消息传递...

    JMS583 USB PCIE 桥接芯片方案

    **JMS583 USB转PCIE桥接芯片方案** JMS583是一款由JMicron科技公司设计的高效能USB到PCI Express (PCIe)桥接芯片,旨在为电子设备提供一种灵活的方式来实现高速数据传输。这款芯片能够将USB接口转换成PCIe接口,以...

    jms-1.1.jar

    《JMS 1.1 API详解与应用实践》 Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的一种标准接口。JMS 1.1是其一个重要的版本,它为分布式系统中的应用程序提供了一种可靠的...

    USB转SATA硬盘盒JMS583量产工具

    标题中的“USB转SATA硬盘盒JMS583量产工具”是指一种专门用于将USB接口转换为SATA接口的硬件设备,其中JMS583是该转换器的主控芯片。这种硬盘盒允许用户将传统的SATA硬盘通过USB接口连接到电脑上,方便数据迁移、...

    JMS583量产工具.zip

    【JMS583量产工具】是一款专门针对JMS583芯片进行批量生产操作的软件工具,主要用于USB闪存盘的制作与修复。这款工具的全称可能为"JMS583 Mass Production Tool",它允许用户一次性对多个JMS583芯片驱动的USB设备...

    javax.jms.jar下载

    javax.jms.BytesMessage.class javax.jms.Connection.class javax.jms.ConnectionConsumer.class javax.jms.ConnectionFactory.class javax.jms.ConnectionMetaData.class javax.jms.DeliveryMode.class javax.jms....

    JMS1.1规范(中文)

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用集成的API,主要用于在分布式环境中传递消息。JMS1.1规范是该API的一个版本,提供了标准接口,使得不同的消息中间件(Message Oriented ...

    USB3.0移动硬盘盒 JMS578 固件2018最新固件, G-Technology 移动硬盘盒固件 for JMS578

    标题中的“USB3.0移动硬盘盒 JMS578 固件2018最新固件, G-Technology 移动硬盘盒固件 for JMS578”揭示了这个压缩包文件主要关注的是一个特定型号的USB3.0移动硬盘盒,该盒子采用JMS578主控芯片,并且提供了2018年...

    javax.jms-1.1.jar

    `javax.jms-1.1.jar` 是一个Java Message Service(JMS)的API库,它属于Java标准版(Java Standard Edition, Java SE)的一部分。JMS是Java平台上的一个规范,用于在分布式环境中进行异步消息传递。这个库主要用于...

    JMS578多达13个固件打包升级工具包 可修改休眠时间

    文件包含: 13个不同固件 两个固件升级工具 其中一个是量产工具可以修改休眠时间和盒子信息 TRIM检查工具 有几个固件版本为全网首发,别人没有的资源 固件列表: JMS578_00.01.00.05 ...JMS578_254.02.03.09_NoUAS

    weblogic中使用JMS发送和接受消息

    WebLogic Server是一款由Oracle公司提供的企业级应用服务器,它支持Java Message Service (JMS) 规范,允许在分布式环境中可靠地发送和接收消息。JMS是Java平台上的标准接口,用于实现应用程序间的异步通信。本文将...

    Weblogic JMS 依赖jar包下载

    Weblogic JMS 依赖jar包是Oracle公司的中间件产品Weblogic Server中用于实现Java Message Service (JMS) 功能的关键组件。JMS是一种标准API,它允许应用程序在分布式环境中发送和接收消息,提供了异步通信的能力。在...

    JMS(JMS(JMS(JMS(

    JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS

    JMS577主控通刷固件

    标题“JMS577主控通刷固件”指的是针对希捷移动硬盘中采用JMS577主控芯片的固件更新解决方案。在IT领域,固件是存储在硬件设备上的软件部分,它控制设备的操作并提供与主机系统的交互。JMS577是一种常见的硬盘主控...

Global site tag (gtag.js) - Google Analytics