RocketMQ 代理

Apache RocketMQ 是一个消息分发系统,它由四种角色组成:生产者、消费者、名称服务器(name server)和代理服务器(broker server)。前两者以 SDK 的形式嵌入到用户应用程序中,而后者则是独立的服务器。

RocketMQ 中的消息携带一个主题(topic)作为其目的地,并可选的携带一个或多个标记作为应用程序中特别的标签。

生产者通常根据它们的主题向代理发送消息。与大多数分发系统类似,生产者需要知道如何连接到它们的代理服务器。 为了实现这个目标,RocketMQ 提供了供生产者查找的名称服务器集群。也就是说,当生产者尝试去发送消息到一个新的主题,它首先会尝试从名称服务器中查找为该主题提供服务的代理的地址(称为路由信息)。 一但生产者获得了到达主题的路由信息,它就会主动的将他们缓存到内存中,并且会定期更新。这种机制虽然简单,但是可以保持服务的高可用性而不需要名称服务器服务的高可用性。

代理向最终用户提供消息服务。除了各种消息服务之外,它们还会定期向名称服务器报告当前服务的健康状态和主题的路由信息。

名称服务器的主要作用是查询主题的路由信息。此外,一旦所属的代理在配置的一段时间里没有报告其健康信息,它就会清除对应的路由信息条目。 这也是为了确保客户端可以一直连接到在线的且随时可以提供服务的代理。

应用程序使用消费者从代理拉取消息。它们之间也有类似心跳的机制来维持生命状态。RocketMQ 代理支持两种消息获取方法:long-pulling 和 pop 。

使用第一种方法,消费者必须实现负载均衡算法。从消费者的角度来看,pop 方法是无状态的。

Envoy RocketMQ 过滤器代理在生产者/消费者和代理之间的请求和响应。并且收集各种统计信息以增强可观测性。

目前,已经实现基于 pop 的消息拉取。而 Long-pulling 也将在下一个 pull request 中实现。

统计信息

每个配置的 rocketmq 代理过滤器都有以 rocketmq.<stat_prefix>. 为根,如下所示的统计信息:

名称

类型

描述

request

Counter

请求总数

request_decoding_error

Counter

解码异常请求总数

request_decoding_success

Counter

解码成功请求总数

response

Counter

响应总数

response_decoding_error

Counter

解码异常响应总数

response_decoding_success

Counter

解码成功响应总数

response_error

Counter

响应异常总数

response_success

Counter

响应成功总数

heartbeat

Counter

心跳请求总数

unregister

Counter

注销请求总数

get_topic_route

Counter

获取主题路由请求总数

send_message_v1

Counter

发送 v1 消息请求总数

send_message_v2

Counter

发送 v2 消息请求总数

pop_message

Counter

弹出消息请求总数

ack_message

Counter

确认消息请求总数

get_consumer_list

Counter

获取消费者列表请求总数

maintenance_failure

Counter

维修失败总数

request_active

Gauge

活跃请求总数

send_message_v1_active

Gauge

发送 v1 消息的活跃请求总数

send_message_v2_active

Gauge

发送 v2 消息的活跃请求总数

pop_message_active

Gauge

活跃弹出消息的活跃请求总数

get_topic_route_active

Gauge

获取主题路由的活跃请求总数

send_message_pending

Gauge

等到发送消息的请求总数

pop_message_pending

Gauge

等待弹出消息的请求总数

get_topic_route_pending

Gauge

等待获取主题路由的请求总数

total_pending

Gauge

等待请求总数

request_time_ms

Histogram

请求时间以毫秒为单位