使用 rabbitmq 的 Envoy 代理

Envoy proxy with rabbitmq

我们一直在迁移到 .net 核心控制台应用程序微服务。目前,每个微服务都在一个链中工作,并将消息放入 rabbitmq,然后下一个服务从 rabbitmq 中挑选一条消息,处理它,然后放入另一个 rabbitmq....我们有大约 9 个服务。

我们看到服务失败的问题并且不知道为什么,但经常看到 rabbitmq 连接问题或网络问题影响下一个服务器(一些虚拟机将所有服务托管在同一个盒子上,其他虚拟机分布在盒子之间) 我一直在研究 envoy 代理,因为它处理断路器等东西并声称具有可观察性

但是,我在网上找不到任何地方有人使用 envoy proxy 和 rabbitmq

envoy代理可以通过这种方式与rabbitmq一起使用吗? 还是 envoy proxy 充当队列?

我们目前每秒处理大约 4,000 条消息,我们需要尽可能接近实时地处理。

Envoy 不充当队列,因此它无法替代您的 message-based 通信系统。但是,它可以代理流量 to/from RabbitMQ 服务器,为您提供一些您正在寻找的内容。

您要做的是使用 TCP Proxy 功能设置 RabbitMQ 的 TCP 反向代理。那么你的服务器应该都连接到 Envoy 代理而不是直接连接到消息队列。 Envoy 的内置统计信息将输出它处理的 TCP 连接(所有 RabbitMQ 协议似乎都是 TCP)的指标。它还本质上支持断路器、超时、重试等,因此您将获得所有这些。但是您肯定需要根据您的特定部署调整这些。

我们在我的公司多次使用此模式,只是使用 Kafka 而不是 RabbitMQ。但是,由于它们都是基于 TCP 的,因此工作方式应该相似。