JMS——Java消息服务(Java Message Service)应用程序接口简介

1,什么是JMS

JMS 在百度百科中的定义:

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


JMS 和 ActiveMQ、RabbitMQ 等的关系,个人简单理解为:类似于 JPA 与 Hibernate、TopLink 等关系类似:

如 JPA 的解析:

JPA 是套规范,不是一套产品。那么像Hibernate,TopLink,JDO他们是一套产品,如果说这些产品实现了这个JPA规范,那么我们就可以叫他们为 JPA 的实现产品


对于 JMS 可以简单理解为:

JMS 是一个标准或者说是一个协议,通常用于企业级应用的消息传递。 主要有queue 消息(1对1),topic 消息(1 对多),Apache出品的 activeMQ 就是一个 JMS 的实现。

两个应用程序之间需要进行通信,我们使用一个 JMS 服务,进行中间的转发,通过 JMS 的使用,我们可以解除两个程序之间的耦合,分布式通信耦合更低,消息服务更加可靠 。[ 而JMS实现 ( ActiveMQ、RabbitMQ 等就是 JMS 的实现产品 ]


 

2,什么是面向消息中间件(MOM)

面向消息的中间件使用消息传送提供者来协调消息传送操作。MOM 系统的基本元素是客户端、消息和 MOM 提供者,后者包括 API 和管理工具。MOM 提供者使用不同的体系结构路由和传送消息:它可以使用集中式消息服务器,也可以将路由和传送功能分布在每个客户端上。某些 MOM 产品结合了这两个方法。

Oracle上详细介绍:https://docs.oracle.com/cd/E19148-01/820-0533/aeraq/index.html


全称:Message-Oriented Middleware 中文:面向消息的中间件。

MOM通信模型:

MOM模型中的四个基本元素:

  • 消息传递提供者
  • 目的地
  • 客户端(发送方或接收方)
  • 消息

发送方客户端将消息发送到消息提供者维护的目的地,这些消息一直被保留直到接收方客户端将消息取出。
消息中间件有很多的用途和优点:

  1. 将数据从一个应用程序传送到另一个应用程序,或者从软件的一个模块传送到另外一个模块;
  2. 负责建立网络通信的通道,进行数据的可靠传送。
  3. 保证数据不重发,不丢失
  4. 能够实现跨平台操作,能够为不同操作系统上的软件集成技工数据传送服务
  5. 优势:Asynchronous(异步),Reliable(可靠)

 

3,JMS的消息模型

JMS具有两种通信模式:

  1. 点对点队列模型:Point-to-Point(P2P)
  2. 发布订阅模型:Publish/Subscribe(Pub/Sub)

在JMS API出现之前,大部分产品使用“点对点”和“发布/订阅”中的任一方式来进行消息通讯。JMS定义了这两种消息发送模型的规范,它们相互独立。任何JMS的提供者可以实现其中的一种或两种模型,这是它们自己的选择。JMS规范提供了通用接口保证我们基于JMS API编写的程序适用于任何一种模型。


(一) 点对点队列模型:Point-to-Point(P2P)

模型组成对象:在点对点通信模式中,应用程序由消息队列(Queue),发送方(Sender),接收方(Receiver)组成。

涉及到的概念:每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。

特点:

  • 每个消息只有一个消费者(Consumer),消息一旦被消费就会从队列中移除
  • 发送者和接收者在时间上没有依赖性(异步),即发送者发送消息时接收者无需处于运行状态,同样接收者接收消息时发送者无需处于运行状态
  • 接收者接收消息之后需向队列应答成功

(二)发布订阅模型:Publish/Subscribe(Pub/Sub)

模型组成对象:在发布订阅模式中,应用程序由主题(Topic),发布者(Publisher),订阅者(Subscriber)

涉及到的概念:在发布/订阅消息模型中,发布者发布一个消息,该消息通过topic传递给所有的客户端。该模式下,发布者与订阅者都是匿名的,即发布者与订阅者都不知道对方是谁。并且可以动态的发布订阅Topic。Topic主要用于保存和传递消息,且会一直保存消息直到消息被传递给客户端。

特点:

  • 一个消息可以有多个订阅者
  • 发布者与订阅者具有时间约束,针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。
  • 为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。

 

4,JMS接收消息的方式

在JMS中,消息的产生和消息是异步的。对于消费来说,JMS的消息者可以通过两种方式来消费消息。

同步:接收者或订阅者调用 receive() 方法来接收消息,消息到达(或超时)之前将一直阻塞。
异步:使用异步方式接收消息的话,消息订阅者需注册一个消息监听者,类似于事件监听器,只要消息到达,JMS服务提供者会自动通过调用监听器的 onMessage() 递送消息。

如使用异步方式:在SpringBoot中,将订阅者添加监听:

@Component
public class Consumer2 {
    @JmsListener(destination = "mytest.queue")
    public voidreceiveQueue(String message) {
        System.out.println("消费者收到的消息是:" + message);
    }
}

 

5, JMS编程模型

  1. 管理对象(Administered objects)-连接工厂(Connection Factories)和目的地(Destination)
  2. 连接对象(Connections)
  3. 会话(Sessions)
  4. 消息生产者(Message Producers)
  5. 消息消费者(Message Consumers)
  6. 消息监听者(Message Listeners)

此处就不详细介绍了,先大致了解即可,用到时再深入研究https://baike.so.com/doc/1005192-1062691.html

 

 


参考来源于:

http://www.cnblogs.com/jaycekon/p/6220200.html

https://blog.csdn.net/qq_16313365/article/details/78452396

https://baike.so.com/doc/1005192-1062691.html

https://docs.oracle.com/cd/E19148-01/820-0533/aeraq/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java消息服务Java Message Service,简称JMS)是一个Java消息中间件的应用程序接口(API)标准,用于处理面向消息的通信。它提供了一个可靠的消息传递模型,用于在分布式系统中发送、传递和接收消息JMS提供的主要功能包括生产和消费消息。生产者创建并发送消息消息队列(Queue)或主题(Topic),而消费者从中接收和处理这些消息JMS支持点对点模型和发布-订阅模型。 在点对点模型中,消息被发送给某一个特定的消费者,而在发布-订阅模型中,消息被广播给多个订阅者。这种灵活性使得JMS非常适合于应用场景,例如异步通信、事件驱动架构、系统集成等。 JMS采用了异步的消息传递方式,这意味着发送方和接收方不需要同时在线。消息可以在发送后被存储在消息队列中,直到接收方准备好处理它们。这种异步通信方式有助于提高系统的可靠性、可扩展性和灵活性。 除了基本的消息传递功能,JMS还提供了一些高级特性,如持久化消息、事务性消息消息过滤等。持久化消息可以确保即使在发送方或接收方断电或崩溃时,消息也不会丢失。事务性消息允许多个消息操作作为一个原子操作进行提交或回滚。消息过滤允许消费者只接收满足特定条件的消息。 总之,Java消息服务是一种功能强大的消息中间件,为分布式系统提供了可靠、灵活和高效的消息传递机制。它在现代的软件架构中扮演着重要角色,帮助开发人员构建可靠的、高性能的系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值