ACTIVEMQ介绍

来源:互联网 发布:好看的步兵番号知乎 编辑:程序博客网 时间:2024/05/18 19:47


一、 名词解释

1. MQ(message queue):消息队列;个人理解:本质一个队列,存放message,然后还能按照规则去取;主要目的是为了系统解耦。

2. JMS(Java Message Service):是一个java面向mq中间件的规范;

3. ACTIVEMQ:实现了JMS1.1规范的面向消息的中间件; 还有其它中间件RabbitMQKafkaZeroMQ等等,有些实现了JMS规范,有些则没有;

二、 概述

       activemq是一个快速的开源消息组件(框架),支持集群,同等网络,自动检测,TCPSSL,广播,持久化,XA,和J2EE1.4容器无缝结合,并且支持轻量级容器和大多数跨语言客户端上的Java虚拟机。消息异步接受,减少软件多系统集成的耦合度。消息可靠接收,确保消息在中间件可靠保存,多个消息也可以组成原子事务

三、 JMS(ACTIVEMQ)应用场景

1.  作为RPC的替代

使用RPC同步调用的应用十分普遍。尽管很多系统很成功,但是转换使用异步消息可以带来很多好处,而且也不会放弃响应保证。使用同步请求的系统在规模上有较大的限制,因为请求会被阻塞,从而导致整个系统变慢。如果使用异步消息替代,可以很容易增加额外的消息接收者,使得消息能被并发消耗,从而加快请求处理。当然,你的系统应用间应该是解耦的。

2. 应用之间解耦

紧耦架构可以导致很多问题,尤其是如果他们是分布的。松耦合架构,在另一方面,证实了更少的依赖性,能够更好地处理不可预见的改变。不仅可以在系统中改变组件而不影响整个系统,而且组件交互也相当的简单。相比使用同步的系统(调用者必须等待被调用者返回信息),异步系统(调用方发送消息后就不管,即fire-and-forget)能够给我们带来事件驱动架构(event-driven architecture EDA)。

3. 作为事件驱动架构的主干

解耦、异步风格架构允许软件本身进一步扩展(水平的可扩展性),而不是依赖硬件的可扩展性(垂直的可扩展)

四、 JMS(ACTIVEMQ)基本概念与应用

JMS支持两种消息传递模型:基于队列(Queue)点对点模型和基于主题(Topic)发布/订阅模型。这两种消息传递模型非常相似,但有以下区别:

1.  Queue消息传递模型规定了一条消息只能够传递给一个消费者。

2. Topic消息传递模型允许一条消息传递给多个消费者

 

4. 点对点的消息传递模型

通过点对点的消息传递模型,一个应用程序可以向另外一个应用程序发送消息。在此传递模型中,目标类型是队列。消息首先被传送至队列目标,然后从该队列将消息传送至对此队列进行监听的某个消费者,如下图:



 一个队列可以关联多个队列发送方和接收方,但一条消息仅传递给一个接收方。如果多个接收方正在监听队列上的消息,JMS Provider将根据先来者优先的原则确定由哪个接收方接受下一条消息。如果没有接收方在监听队列,消息将保留在队列中,直至接收方连接到队列为止。

温馨提示:在此列模型中,消息不会自动推给给客户端,而是要求客户端从队列中请求获得。

 

5. 发布/订阅消息传递模型

通过发布/订阅消息传递模型,应用程序能够将一条消息发送到多个接收方。在此传送模型中,目标类型是主题。消息首先被传送至主题目标,然后传送至所有已订阅此主题的送消费者。如下图:



 主题目标也支持长期订阅。长期订阅表示消费者已注册了主题目标,但在消息到达目标时该消费者可以处于非活动状态。当消费者再次处于活动状态时,将会接收该消息。如果消费者均没有注册某个主题目标,该主题只保留注册了长期订阅的非活动消费者的消息。与点对点消息传递模型不同,发布/订阅消息传递模型允许多个主题订阅者接收同一条消息。JMS一直保留消息,直至所有主题订阅者都接收到消息为止。

 

原创粉丝点击