ActiveMQ知识盘点【壹】_JMS介绍及两种消息模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xinzun/article/details/79019878

RabbitMQ知识盘点【壹】_消息队列介绍及三种消息路由模式


RabbitMQ知识盘点【贰】_实现原理及RabbitMQ集群


前两篇文章介绍了RabbitMQ,本文说一说ActiveMQ。


ActiveMQ是Apache软件基金下的一个开源软件。不同于RabbitMQ,它遵循的是JMS1.1规范(Java Message Service),是消息驱动中间件软件(Message-oriented middleware,简称MOM)。它为企业消息传递提供高可用,出色性能,可扩展,稳定和安全保障。ActiveMQ使用Apache许可协议。因此,任何人都可以使用和修改它而不必反馈任何改变。这对于商业上将ActiveMQ用在重要用途的人尤为关键。MOM的工作是在分布式的各应用之间调度事件和消息,使之到达指定的接收者。所以高可用,高性能,高可扩展性尤为关键。


那么什么是JMS规范呢?


JMS规范


JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。


JMS支持2种消息模式,分别为点对点模式和发布/订阅模式。


点对点模式(Queue)


在点对点的传输方式中,消息数据被持久化,每条消息都能被消费,数据不会丢失,一对一的发布接收策略,保证数据完整。

总结下来,点对点模型的特点:
1.每条消息有一个消费者;
2.发送和接受消息与时间没有关系
3.发送和接受消息与时间没有关系
4.非持久的消息最多只发送一次
5.持久的消息严格发送一次




发布/订阅模式(Topic)


在发布订阅消息方式中,消息是无状态的,不保证每条消息被消费,只有监听该Topic地址才能收到消息并消费,否则该消息将会丢失。一对多的发布接收策略,可以同时消费多个消息。

总结一下,发布/订阅模型的特点:
1.每个消息都可以有多个订阅者
2.订阅者只能消费他们订阅之后发布的消息
3.订阅者必须保持为活动状态才能使用这些消息




JMS定义的接口封装在javax.jms中,主要有如下组成部分:


ConnectionFactory
Connection的工厂类,用于创建Connection。针对两种不同的jms消息模型,jms分别提供了QueueConnectionFactory和TopicConnectionFactory。


Connection
Connection是对TCP/IP或socket的封装,用于表示在客户端和MQ服务端之间建立的链接。一个Connection中可以创建一个或多个Session。跟ConnectionFactory一样,Connection也有QueueConnection和TopicConnection两种类型


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


Destination
Destination用于标注消息的指向,对于生产者来说,Destination是消息的发送目标;对于消费者来说,Destination是消息的来源。在JMS中,Destination可以是两种类型的对象:队列(Queue)或主题(Topic)。


MessageProducer
Producer即消息生产者,绑定在Session上,并用于将消息发送到Destination。同上,消息生产者分两种类型:QueueSender和TopicPublisher。


MessageConsumer
Consumer即消息消费者,也是绑定在Session上,用于接收被发送到Destination的消息。一样两种类型QueueReceiver和TopicSubscriber。在发布/订阅模式下,可以创建持久化的订阅者。


Message

消息就是生产者和消费者之间传输的对象。一个消息有三个主要部分:
消息头(必须):包含用于识别和为消息寻找路由的操作设置。
一组消息属性(可选):包含额外的属性,支持其他提供者和用户的兼容。可以创建定制的字段和过滤器(消息选择器)。
一个消息体(可选):允许用户创建五种类型的消息(文本消息,映射消息,字节消息,流消息和对象消息)。


MessageListener
消息监听器,一般绑定在消息消费者上。如果注册了消息监听器,消息到达后将触发监听器的onMessage方法。


各个组件的调用关系图如下:



下一篇文章写一下ActiveMQ的例子和原理。

阅读更多
换一批

没有更多推荐了,返回首页