当前位置: 首页 > 知识库问答 >
问题:

微服务和RabbitMQ

龚凌
2023-03-14

我是微服务新手,对RabbitMQ/EasyNetQ有疑问。我正在从一个微服务向另一个微服务发送消息。

每个微服务都是Web API的。我正在使用CQRS,我的命令处理程序将消耗队列中的消息并执行一些业务逻辑。为了调用处理程序,它需要向API方法发出请求。

我想知道,而不必显式调用APIendpoint来命中消耗消息的代码。是否有一种无需调用APIendpoint的自动化方法?

建议创建一个单独的解决方案,该解决方案将是一个控制台应用程序,它将执行RabbitMQ以开始侦听。创建一个while循环来读取消息,然后在每次向队列发送新消息时调用webapiendpoint来处理业务逻辑。

我的目标是创建一个侦听器或启动任务,一旦消息在队列中,它将自动从队列中提取消息,并继续使用命令处理程序,但不确定如何按照我描述的“自动”方式操作。我在考虑使用持续运行的Azure WebWork,它将充当消费者。
寻找一种好的架构方法。

正在使用的编程语言是C#

非常感谢

共有3个答案

怀经赋
2023-03-14

我认为使用CQRS模式,您也将拥有事件和相应的事件处理程序。当您使用RabbitMQ进行命令和查询之间的异步通信时,可以通过回调方法监听放在RabbitMQ上特定通道上的任何消息

从队列接收消息更加复杂。它通过向队列订阅回调函数来工作。每当我们收到消息时,Pika库就会调用这个回调函数。

柴辰阳
2023-03-14

我正在使用CQRS,其中我的命令处理程序将从队列中消耗消息并执行一些业务逻辑。为了调用处理程序,它需要向API方法发出请求。

你确定这是真的CQRS吗?当您在域逻辑中以不同的方式处理查询和命令时,CQRS就会出现。通过Calss接收消息,这被称为命令处理程序,只是对它做出反应还不是CQRS。

我的目标是创建一个侦听器或启动任务,一旦消息在队列中,它将自动从队列中提取消息,并继续使用命令处理程序,但不确定如何按照我描述的“自动”方式操作。我在考虑使用持续运行的Azure WebWork,它将充当消费者。寻找一种好的建筑方法。

你做得越容易越好。在你尝试了所有简单的解决方案之前,不要去寻找复杂的解决方案。当我实现类似的东西时,我只是使用Linuxcron运行一个消息处理程序脚本池。处理程序从队列中弹出一条消息,处理它并终止。简单。

有权
2023-03-14

托管RabbitMQ订阅者的推荐方式是使用类似topShelch库的东西编写一个windows服务,并在服务启动时订阅该服务中的总线事件。我们在多个项目中做到了这一点,没有任何问题。

如果您使用的是Azure,托管RabbitMQ订阅服务器的最佳位置是“工作者角色”。

 类似资料:
  • 我想知道每种方法的利弊是什么。例如,在graphQL中包含所有内容似乎有点多余,因为我们将在每个服务中复制模式的部分。另一方面,我们使用GraphQL来避免一些REST缺陷。我们担心拥有RESTendpoint会抵消从GQL获得的优势。 有人遇到过类似的困境吗?我们都没有使用GraphQL的经验,所以这里是否有一些明显的利弊我们可能会遗漏? 提前道谢!

  • 更准确地说,在我看来,BDD测试应该验证业务逻辑,而且只验证业务逻辑。在许多框架中,BDD测试场景是由滑板持有者用DSL创建的。BDD测试倾向于收敛于排他性的“不了解基础设施”的实践。另一方面,集成测试应该验证解决方案是否与目标基础结构匹配(它们由DevOps完成?),并且只与基础结构匹配。当业务功能通过微服务“分布”时,您应该模拟BDD测试环境(应该是本地环境)中的几乎所有内容(infra和bu

  • 问题内容: 我们有几个微服务项目,每个项目都是独立的(在单独的spring boot服务器上运行,公开其余服务,使用单独的DB模式…) 我们使用Maven管理依赖关系。 有一个父pom将每个微服务声明为模块是一个好主意吗?因此,有助于管理公共依赖项(例如,在每个项目中都使用lib servlet-api witch,将其全部删除并仅在父pom中声明) 问题答案: 多模块父pom的“问题”是,没有复

  • 我们有几个项目是微服务,每个项目都是独立的(在单独的spring boot服务器上运行,公开rest服务,使用单独的DB模式…) 我们使用maven来管理依赖关系 让父pom将每个微服务声明为模块是个好主意吗?因此有助于管理公共依赖项(就像每个项目中使用的lib servlet-api女巫一样,将其全部删除并仅在父pom中声明它)

  • 微服务作为一种软件架构风格正在获得牵引力,它将更好地支持持续交付,为快速部署和关注点分离提供模型。 Vert.x 3和Vert.x-Apex为构建微服务提供了一个有趣的模型。如其中一个例子所示,一个简单的verticle可以公开一个HTTP服务,因此REST服务是可用的。垂直绑定它自己的tcp端口。 当扩展到多个微服务来支持一个完整的应用程序时,您最终会有许多选择。对于哪种风格能够最终支持连续交付

  • 基本 Nest 微服务是一种使用与HTTP不同的传输层的应用程序。 安装 首先,我们需要安装所需的软件包: $ npm i --save @nestjs/microservices 概述 通常,Nest支持一系列内置的传输器。它们基于 请求-响应 范式,整个通信逻辑隐藏在抽象层之后。多亏了这一点,您可以轻松地在传输器之间切换,而无需更改任何代码行。我们不支持具有基于日志的持久性的流平台,例如 Ka

  • 让我们讨论一下微服务环境的体系结构。我们正在公司内部进行讨论,我想得到一些反馈。我认真考虑的是编排层(代码复制、更多移动部件改变api)。 网络应用- 原料药- 在这种情况下,服务不允许相互对话。业务流程层中的聚合服务 网络应用- 原料药- 这里允许服务相互对话,这里存在聚合服务。 账单属于哪里

  • 我是测微计新手。有人能告诉我如何在spring boot中集中管理微服务指标吗? 在哪里可以获得influxdb中所有注册的服务信息、矩阵和存储的度量?