使用RabbitMQ的特使代理

问题描述

我们一直在迁移到.net核心控制台应用程序微服务。当前,每个微服务都按链式工作并将消息放入Rabbitmq,然后下一个服务从Rabbitmq提取一条消息,对其进行处理,然后放入另一个Rabbitmq...。我们大约有9个服务。

我们看到了服务失败的问题,却不知道为什么,但是经常看到Rabbitmq连接问题或击中下一台服务器的网络问题(某些虚拟机的所有服务都托管在同一个盒子中,其他虚拟机则在盒子之间分配) 我一直在寻找使节代理,因为它处理断路器等问题并声称具有可观察性

但是,我无法在网上找到任何人都在使用Rabbitmq的Envoy代理

特使代理可以以这种方式与Rabbitmq一起使用吗? 还是使者代理充当队列?

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

解决方法

Envoy不会充当队列,因此它不能替代您基于消息的通信系统。但是,它可以代理往返RabbitMQ服务器的流量,从而为您提供所需的内容。

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

我们在公司使用Kafka而不是RabbitMQ多次完成了这种模式。但是,由于它们都是基于TCP的,因此应该可以类似地工作。