无题

RocketMQ

RocketMQ5.0中的几个角色NameServer、Broker 和 Proxy,它们的作用如下:

  • NameServer: NameServer 是 RocketMQ 的名称服务器,负责管理消息队列和消费者组。
  • Broker:Broker 是 RocketMQ 的消息代理服务器,负责接收、处理和存储消息。
  • Proxy: Proxy 是 RocketMQ 的代理服务器,用于扩展消息代理服务器的性能和容量。Proxy 可以将消息路由 到多个 Broker 上,以实现负载均衡和容错。Proxy 还提供了一些接口,如队列管理、消费者管理、配置管理 等,供客户端使用。

总之,NameServer、Broker 和 Proxy 都是 RocketMQ 分布式消息代理服务器的重要组成部分,它们共同协作,实现消息的传输和处理。

在5.0版本中 Proxy 和 Broker 可以根据实际诉求可以分为 Local 模式和 Cluster 模式。

没有特殊的需求或者遵循从早期版本平滑升级的思路,可以选用Local模式。I

  • 在 Local 模式下,Broker 和 Proxy 是同进程部署,只是在原有 Broker 的配置基础上新增 Proxy 的简易配置就可以运行。

  • 在 Cluster 模式下,Broker 和 Proxy 分别部署,即在原有的集群基础上,额外再部署 Proxy 即可。

2. 消息的顺序保障

如何保证消息的顺序性,比如创建订单、修改订单、取消订单三个消息,如果不按照正常流程进行,最后订单的状态将是未知的,这就是消息的顺序性

要保证a、b、c三个消息的熟悉女为 a → b → c 该如何实现

  1. 消息顺序投递
  2. 消息顺序存储
  3. 消息顺序接收

要保证1成立,那么消息生产者应该有序保证顺序投递消息,避免多线程下产生并发问题

在rocketmq中,要保证2的成立,那么投递的消息应该在相同主题的同一个队列里面

要保证3成立,那么对于消费者就需要保证消息消费的有序进行

1. V5以下版本

  1. 生产消息的顺序性

发送消息的时候可以 MessageQueueSelector来实现消息存储的顺序性,可以选择相同的队列

  1. 消费消息的顺序性

消息的顺序消费可以使用MessageListenerOrderly保证消费的顺序性

2. V5及以上版本

  1. 生产消息的顺序性

创建顺序主题
mqadmin updateTopic -c DefaultCluster -t FIFOTopic -o true -n 127.0.0.1:9876 -a +message.type=FIFO

发送消息是利用消息分组来路由相同的队列 MessageBuilder#setMessageGroup

  1. 消费消息的顺序性

创建顺序消息消费者分组

mqadmin updateSubGroup -c DefaultCluster -g FIFOGroup -o true -n 127.0.0.1:9876