消息队列中间件(二)使用 ActiveMQ

ActiveMQ 介绍

Active MQ 是由 Apache 出品的一款流行的功能强大的开源消息中间件,它速度快,支持跨语言的客户端,具有易于使用的企业集成模式和许多的高级功能,同时完全支持 JSM1.1 和 J2EE1.4 。

官方下载地址:

http://activemq.apache.org/download.html

官方安装教程:

http://activemq.apache.org/getting-started.html

默认管理页面:

http://127.0.0.1:8161/admin/

默认用户名和密码为

admin / admin。

conf / jetty-real.properties 您可以在此文件中进行配置。

默认服务端口:61616

ActiveMQ 特点

支持Java,C,C ++,C#,Ruby,Perl,Python,PHP等各种跨语言客户端和协议,如 OpenWire , Stomp , AMQP , MQTT.

完全支持JMS 1.1和 J2EE 1.4,支持瞬态,持久,事务和XA消息传递。

对 Spring 框架的支持以便ActiveMQ可以轻松嵌入到Spring应用程序中。

通过了常见的 J2EE 服务器测试,如 TomEE,Geronimo,JBoss,GlassFish 和 WebLogic 。

连接方式的多样化,ActiveMQ 提供了多种连接模式,例如 in-VM、TCP、SSL、NIO、UDP、多播、JGroups、JXTA。

可以通过使用 JDBC 和 journal 实现消息的快速持久化。

专为高性能群集,客户端 - 服务器,点对点通信而设计。

提供与语言无关的 REST API。

支持 Ajax 方式调用 ActiveMQ。

ActiveMQ 可以轻松地与 CXF、Axis 等 Web Service 技术整合,以提供可靠的消息传递。

可用作为内存中的 JMS 提供者,非常适合 JMS 单元测试。

ActiveMQ 消息

点对点队列模式

消息到达消息系统,被保留在消息队列中,然后由一个或者多个消费者消费队列中的消息,一个消息只能被一个消费者消费,然后就会被移除。例如订单处理系统。

发布-订阅模式

消息发送时指定主题(或者说通道),消息被保留在指定的主题中,消费者可以订阅多个主题,并使用主题中的所有的消息,例如现实中的电视与电视频道。所有客户端包括发布者和订阅者,主题中的消息可以被所有的订阅者消费,消费者只能消费订阅之后发送到主题中的消息。

ActiveMQ 概念

Broker,消息代理,表示消息队列服务器实体,接受客户端连接,提供消息通信的核心服务。

Producer,消息生产者,业务的发起方,负责生产消息并传输给 Broker 。

Consumer,消息消费者,业务的处理方,负责从 Broker 获取消息并进行业务逻辑处理。

Topic,主题,发布订阅模式下的消息统一汇集地,不同生产者向 Topic 发送消息,由 Broker 分发到不同的订阅者,实现消息的广播。

Queue,队列,点对点模式下特定生产者向特定队列发送消息,消费者订阅特定队列接收消息并进行业务逻辑处理。

Message,消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务 数据,实现消息的传输。

ActiveMQ 工程实例

下面是使用 ActiveMQ 的队列模式和发布-订阅模式的 Java 代码示例。

POM 依赖

org.apache.activemq

activemq-all

5.15.5

队列模式消费者

队列模式生产者

队列模式生产者

发布订阅模式生产者

发布订阅模式生产者

GitHub源码

https://github.com/niumoo/message-queue

Spring 整合 ActiveMQ

在 Spring 中配置 Active MQ 就像Spring 整合其他功能一样,我们需要在 XML 配置中配置几个关键的实例即可。在 Active MQ 中有几个对象的实例是至关重要的,如 Active MQ jms 连接工厂,为了减少连接断开性能时间消耗的 jms 连接池以及生产者消费者等。

下面是一些详细说明。

ConnectionFactory 用于管理连接的连接工厂(Spring提供)。

一个 Spring 为我们提供的连接池。

JmsTemplate 每次发送都会重新创建连接,会话和 Productor。

Spring 中提供了SingleConnectionFactory 和CachingConnectionFactory(增加了缓存功能)。

JmsTemplate 是用于发送和接收消息的模板类。

是spring提供的,只需要向Spring 容器内注册这个类就可以使用 JmsTemplate 方便的操作jms。

JmsTemplate 类是线程安全的,可以在整个应用范围使用。

MessageListerner 消息监听器

使用一个onMessage方法,该方法只接收一个Message参数。

POM 依赖

XML 配置

XML 公共配置

为了份文件配置方便管理,下面是提取出来的公共配置,为了在独立配置生产者和消费者 XML文件时引入,当然也可以直接把生产者和消费者以及所有的 XML bean 配置在一个文件里。

XML 消费者

消费者主要是一个消息监听器,监听指定的队列或者主题的消息信息,来有消息时调用回调监听处理方法。这里我注释掉了监听的队列模式,指定了主题模式。

XML 生产者

生成者的配置主要是使用 spring jms 模版对象,创建生产者实例用于生产消息。

生产者编写

1. 定义接口

2. 主题模式生产者

3. Spring 启动 生产者

消费者编写

Spring启动和生产者类似。下面是消费者监听器的实现。

运行测试

首先主题模式下启动两个消费者,使用生产者推送10条消息。

在每个消费者下面都可以看到推送的完整消息。

文中代码已经上传到GitHub:

https://github.com/niumoo/message-queue

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181211G079QZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券