SpringCloud Alibaba之RocketMQ实战篇

SpringCloud Alibaba之RocketMQ实战篇

一、前言

RocketMQ是阿里开发的基于消息队列的通用消息中间件产品,能集成分布式事务,也继承了RabbitMQ的优点。

RocketMQ都有哪些特性呢?

(1)支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型

(2)在一个队列中可靠的先进先出(FIFO)和严格的顺序传递

(3)支持拉(pull)和推(push)两种消息模式

(4)单一队列百万消息的堆积能力

(5)支持多种消息协议,如 JMS、MQTT 等

(6)分布式高可用的部署架构,满足至少一次消息传递语义

(7)提供 docker 镜像用于隔离测试和云集群部署

(8)提供配置、指标和监控等功能丰富的 Dashboard

二、消息提供者

2.1消息生产者

消息生产者的作用就是将消息发送到 MQ,生产者本身既可以产生消息,如读取文本信息等。也可以对外提供接口,由外部应用来调用接口,再由生产者将收到的消息发送到 MQ。


2.2生产者组

把多个发送同一类消息的生产者称之为一个生产者组。


2.3消息消费者

消费 MQ 上的消息的应用程序就是消费者,至于消息是否进行逻辑处理,还是直接存储到数据库等取决于业务需要。


2.4消费者组

和生产者类似,消费同一类消息的多个 consumer 实例组成一个消费者组。


2.5消息载体

Topic 是一种消息的逻辑分类,比如说你有订单类的消息,也有库存类的消息,那么就需要进行分类,一个是订单 Topic 存放订单相关的消息,一个是库存 Topic 存储库存相关的消息。


2.6消息

一个 Message 必须指定 topic,相当于寄信的地址。Message 还有一个可选的 tag 设置,以便消费端可以基于 tag 进行过滤消息。也可以添加额外的键值对,例如你需要一个业务 key 来查找 broker 上的消息,方便在开发过程中诊断问题。


2.7标签

标签可以被认为是对 Topic 进一步细化。一般在相同业务模块中通过引入标签来标记不同用途的消息。


2.8接收者

Broker 接收来自生产者的消息,储存以及为消费者拉取消息的请求做好准备。


2.9路由信息

Name Server 为 producer 和 consumer 提供路由信息。


三、RocketMQ安装

Maven添加阿里镜像:

<mirror>

<id>aliyun-maven</id>

<mirrorOf>*</mirrorOf>

<name>aliyun maven</name>

<url>http://maven.aliyun.com/nexus/content/groups/public</url>

</mirror>


3.1编译打包

下载RocketMQ:
https://github.com/apache/rocketmq/releases

编译打包:mvn -Prelease-all -DskipTests clean install -U

首先需要安装JDK环境以及Maven环境并添加至Path环境变量:

编译成功后运行文件在
distribution/target/rocketmq-4.8.0目录下


3.2启动集群管理NameServer

mqnamesrv

3.3启动Broker

mqbroker -n localhost:9876


四、在SpringCloud Alibaba中使用

添加Maven依赖:

<dependency>

<groupId>org.apache.rocketmq</groupId>

<artifactId>rocketmq-spring-boot-starter</artifactId>

<version>2.2.0</version>

</dependency>


4.1yml文件连接配置

生产者:

rocketmq.name-server=localhost:9876

rocketmq.producer.group=javagongfu-group

消费者:

rocketmq.name-server=localhost:9876

rocketmq.consumer.group=consumer-group


4.2生产者发送消息

@GetMapping("/gongfu/{msg}")

public String gongfu(@PathVariable String msg) {

MessageBuilder<String> builder = MessageBuilder.withPayload(msg);

Message<String> message = builder.build();

rocketMQTemplate.send("test-topic", message);

log.info("Java功夫发送:" + msg);

return msg;

}


4.3接收者接收消息

@Component

@RocketMQMessageListener(consumerGroup = "consumer-group", topic = "test-topic")

public class TestAPIMqConsumer implements RocketMQListener<String> {

@Override

public void onMessage(String msg) {

System.out.println("Java功夫收到:" + msg);

}

}


4.4运行接口

http://localhost:9000/api/gongfu/helloworld

请求可以看到生产者和消费者打印的消息.

在SpringCloud Alibaba官方推荐中,也是积极使用RocketMQ作为消息中间件,可集成于阿里系更好。

原文链接:,转发请注明来源!