我正在使用RabbitMQ3.7,我发现我的微服务架构开始感到混乱和耦合。
我发现我 * 正在将消息从消费者的received
事件发布到其他队列 *。**这感觉不对。**但我不确定替代方案是什么,因为我受益于将数据从消费者直接传递到下一个队列/任务的效率。
- 请注意,上面只是一个示例,我正在运行的服务是类似的,并且相当依赖于工作流(尽管它们可以独立运行!)*
问题:
1.在微服务相互依赖的情况下,数据通常是如何从一个进程传递到另一个进程(或从消费者传递到发布者)的?不是说它们不能单独运行,而是说它们在工作流场景中工作得最好?
1.如果解决方案涉及 * 不 * 从使用者的received
事件中发布新消息,那么将数据获取到该微服务/流程的正确方法是什么?
2条答案
按热度按时间okxuctiv1#
我发现跨队列链接工作流可能会创建比预期更复杂的工作流,而另一方面,创建更简单的消费者应用程序可以使代码更易于维护。
通过拆分前两个步骤,您的代码是否获得了可伸缩性或简单性?如果没有更详细的信息需要考虑,我可能不会拆分功能的前两个部分。我不认为直接存储抓取结果有什么问题。
我喜欢您的用于发送电子邮件的独立使用者,尽管您可能会考虑创建一个通用的电子邮件发送使用者,您的任何应用程序都可以使用它,并让消息格式包含适当的邮件部分,让使用者构造邮件并发送邮件。
我认为除了考虑找到简单性/复杂性、可伸缩性和可维护性之间的正确平衡之外,这里没有一个“正确”的答案。
6psbrbz92#
微服务体系结构开始感到混乱和耦合。
通常,当你使用微服务时,你试图解耦的不是业务逻辑,而是它的组件/步骤的实现。你把你的业务逻辑应用程序变成一个分布式应用程序,但是应用程序的逻辑依赖和流程不一定改变,这就是为什么有时会感觉混乱。
通常与微服务解耦的是:
作业计划
更具体地说,对于您的示例,我建议您研究作业调度解决方案,而不是消息代理。
两个好的框架是:
我主要使用HangFire之前,它不需要一个单独的专用服务器.
样品
Phoesion Glow中的This is a good sample of HangFire,Phoesion Glow是用于开发、部署和管理dotnet微服务的框架。在此示例中,
Email Service
接收作为作业*(消费者)* 的电子邮件请求,SampleService1
创建/添加作业 (生产者)。该示例还通过向
Email Service
发送请求和RemotePprocedureCall (RPC) 演示了服务间通信,Email Service
负责添加作业并成功响应。(这不是必需的,因为SampleService1
可以直接使用HangFire提交作业)