首页 > 解决方案 > 使用 rabbitmq 的 Envoy 代理

问题描述

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

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

但是,我在网上找不到任何人使用特使代理和rabbitmq

envoy 代理可以用这种方式和 rabbitmq 一起使用吗?还是特使代理充当队列?

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

标签: rabbitmqmicroservicesenvoyproxy

解决方案


Envoy 不充当队列,因此它无法替代您基于消息的通信系统。但是,它可以代理往返于 RabbitMQ 服务器的流量,为您提供一些您正在寻找的内容。

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

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


推荐阅读