java_消息中间件—JMS规范

本文介绍了Java消息服务(JMS)的概念及应用,涵盖了JMS的基本原理、消息模型、消息类型及消息中间件等内容,并探讨了Spring如何集成JMS,以便更好地进行消息处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JMS介绍:
JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
JMS允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分布式通信耦合度更低,消息服务更加可靠以及异步性。
jMS的定义:

JavaAPI。不支持跨语言,并提供了两种消息模型(p2p、pub/sub),有如下消息类型(TextMessage、MapMessage、ByteMessage、StreamMessage、ObjectMessage、Message)。综合评价,JMS定义了Java
API层面的标准,在Java体系中多个client均可以通过JMS进行交互,不需要应用修改代码。 提供者:实现JMS规范的消息中间件服务器

相关术语的解释:

消息中间件(JMS Provider) :
指提供了对JMS协议的第三方组件,比如ActiveMQ就是一个消息中间件,另外比较知名的还有KFA, Rabbit MQ等。
消息模式:分为点对点(Point to
Point,即P2P)和发布/订阅(Pub/Sub),对应的数据结构分别是队列(Queue)和主题(Topic) 消息(Message):
通信内容的载体,其结构主要分为消息头,属性和消息体,并且根据存储结构的不同分为好几种,后面会详细提到。
消息生产者:产生消息的一方,在P2P模式下,指消息发送者(Sender),在P/S模式下指消息发布者(Publisher)
消息消费者:接收消息的一方,对应于两种模式分别是消息接收者(Receiver)和消息订阅者(Subscriber)

JMS相关概念与他的体系架构:

1 JMS提供者
  连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。
  2.JMS客户
  生产或消费消息的基于Java的应用程序或对象。
接受或发送消息的应用程序(客户端)
  3.JMS生产者
  创建并发送消息的JMS客户。

4.JMS消费者
  接收消息的JMS客户。

5.JMS消息
  JMS客户之间传递的数据的对象
  应用程序之间传递的数据内容

   消息模式:在客户端之间传递消息的方式,JMS中定义了主题和队列两种模式
   JMS消息模式:

   1、队列模型:

                (1)、客户端包括生产者与消费

                (2)、队列中的消息只能被一个消费者消费

                (3)、消费者可以随时消费队列中的消息
    2、队列模型的特点:
  .1、每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)

2、提供者和消费者之间在时间上没有依赖性,也就是说当提供者发送了消息之后,不管消费者有没有正在运行,它不会影响到消息被发送到队列
  3、每条消息仅会传送给一个消费者。可能会有多个消费者在一个队列中侦听,但是每个队列中的消息只能被队列中的一个消费者所消费。
  4、消息存在先后顺序。一个队列会按照消息服务器将消息放入队列中的顺序,把它们传送给消费者。当已被消费时,就会从队列头部将它们删除(除非使用了消息优先级)。
  5、消费者在成功接收消息之后需向队列应答成功
    PS:如果你希望发送的每个消息都应该被成功处理的话,那么你需要队列模式。

在这里插入图片描述
2、主题模型:

               (1)、客户端包括发布者和订阅者

               (2)、主题中的消息被所有的订阅者消费

               (3)、订阅者不能消费订阅之前就发布在主题中的消息

在这里插入图片描述

主题模式的特点:
1、每个消息可以有多个消费者
   2、发布者和订阅者之间有时间上的依赖性。针对某个主题的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。
   3、为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
   4、每条消息都会传送给称为订阅者的多个消息消费者。订阅者有许多类型,包括持久型、非持久型和动态型。
   5、发布者通常不会知道、也意识不到哪一个订阅者正在接收主题消息。
   6、消息被推送给消费者,这意味着消息会传送给消费者,而无须请求。
    PS:如果你希望发送的消息可以不被做任何处理、或者被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型

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

1、同步
   订阅者或消费者调用receive方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直阻塞
  2、异步
    订阅者或消费者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法。

JMS规范:
1. ConnectionFactory 接口(连接工厂)

创建Connection对象的工厂,根据消息类型的不同,用户将使用队列连接工厂,或者主题连接工厂分别有QueueConnectionFactory和TopicConnectionFactory两种。可以通过JNDI来查找ConnectionFactory对象。(JNDI:JNDI是 Java 命名与目录接口)

Connection接口(连接)
代表了应用程序与消息服务器之间的通信链路,对TCP/IP socket的包装。(一个连接可以创建多个会话,跟ConnectionFactory一样,Connection也有两种类型:QueueConnection和TopicConnection)

Destination 只消息发布和接受的地点,包括队列或主题

Session 表示一个单线程的上下文,用于发送和接受消息(所有会话都在一个线程中)

MessageConsumer 由会话创建,用于接受发送到目标的消息

MessageProducer 由会话创建,用于发送消息到目标

Message 由会话创建,是生成者/发布者和消费者/订阅者之间传送的对象,包括一个消息头,一组消息属性、一个消息体

在这里插入图片描述

Spring集成JMS:

      spring封装jms提供的接口:

                 1、ConnectionFactory 用于管理连接的连接工厂(注:是Spring提供的),是一个是Spring提供的连接池,因为 Jms每次发送消息都会重新创建连接、会话和producer(生产者),Spring中提供了两种连接池SingleConnectionFactory和CachingConnectionFactory。其中SingleConnectionFactory在整个应用中所有jsm会话都是使用同一个Connertion连接来操作,而CachingConnectionFactory继承自SingleConnectionFactory,拥有SingleConnectionFactory的所有功能,并提供了缓存功能,可以缓存session(会话)、producer(生产者/发布者)、consumer(消费者/订阅者)

                 2、JmsTemplate  用于发送和接收消息的模板类,是Spring提供的,只需要向Spring容器注册这个类就可以使用JmsTemplate方面的操作jms,JmsTemplate类是线程安全的,可以在整个应用范围使用(注:可以创建多个JmsTemplate)

                 3、MessageListerner  消息监听器,只需要实现一个onMessage方法,给方法只接受一个Message参数,就可以实现对消息的操作了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值