rabbitmq - 使用 rabbitmq 的 Envoy 代理
问题描述
我们一直在迁移到 .net 核心控制台应用程序微服务。目前,每个微服务都在链中工作并将消息放入rabbitmq,然后下一个服务从rabbitmq中选择一条消息,处理它,然后放入另一个rabbitmq......我们大约有9个服务。
我们看到服务失败并且不知道原因的问题,但经常看到rabbitmq连接问题或网络问题影响下一个服务器(一些虚拟机将所有服务托管在同一个盒子上,其他则分布在盒子之间)我一直在寻找在特使代理,因为它处理断路器等东西并声称具有可观察性
但是,我在网上找不到任何人使用特使代理和rabbitmq
envoy 代理可以用这种方式和 rabbitmq 一起使用吗?还是特使代理充当队列?
我们目前每秒处理大约 4,000 条消息,我们需要尽可能接近实时地处理。
解决方案
Envoy 不充当队列,因此它无法替代您基于消息的通信系统。但是,它可以代理往返于 RabbitMQ 服务器的流量,为您提供一些您正在寻找的内容。
您要做的是使用TCP 代理功能将 TCP 反向代理设置到 RabbitMQ。然后你的服务器应该都连接到 Envoy 代理而不是直接连接到消息队列。然后,Envoy 的内置统计信息将输出它处理的 TCP 连接(所有 RabbitMQ 协议似乎都是 TCP)的指标。它还本质上支持断路器、超时、重试等,所以你会得到所有这些。但是您肯定必须根据您的特定部署调整这些。
我们在我的公司已经多次使用这种模式,只是使用 Kafka 而不是 RabbitMQ。但是,由于它们都是基于 TCP 的,因此应该类似地工作。
推荐阅读
- spring-boot - maven pom.xml 的 3rdparty 存储库问题
- c# - 从 System.Text.Json 反序列化 NodaTime Instant
- c++ - map::erase(iterator) 函数是否需要有效的密钥内容?
- c - strcspn 中的“c”代表什么?
- maven - Maven 存储库声明是可传递的吗?
- design-patterns - 使用迭代器模式的用例
- html - Html 中的图标选择选项
- php - 从动态链接解析 IMG
- c# - 关闭浏览器 ASP.NET MVC 后如何注销用户
- corda - Corda Enterprise 生成 details-node-.log 文件