node.js - NestJS - 在微服务中结合 HTTP 和 RabbitMQ
问题描述
我有一些微服务,它们通过 API 网关公开。网关负责处理身份验证和路由到系统。网关背后的服务大多是简单的 CRUD-Services。每个服务都公开自己的 API,它们通过 HTTP 同步通信。所有这些服务,包括 API-Gateway,都是“默认”的 NestJS 应用程序。
让我们继续使用 Cats 示例。每当Cat-Service
更新或创建新的Cat
时,我都希望使用CatCreatedEvent
or CatUpdatedEvent
。该事件应该被推送到像 RabbitMQ 这样的消息代理中,另一个服务应该监听这个事件并异步处理该事件。
关于如何以正确的方式“注入”RabbitMQ,我不确定如何实现这一点,我想知道这种方法在一般情况下是否有意义。我看过 NestJS 的 CQRS 模块,但我认为 CQRS 对于这个领域来说有点太多了。特别是因为在这个领域中拆分读写模型没有任何好处。也许我完全走错了路,所以我希望你能给我一些建议。
解决方案
Nestjs支持RabbitMQ作为微服务。如果您希望您的应用程序同时支持 http 请求和消息代理,您可以创建一个混合应用程序。
// Create your regular nest application.
const app = await NestFactory.create(ApplicationModule);
// Then combine it with a RabbitMQ microservice
const microservice = app.connectMicroservice({
transport: Transport.RMQ,
options: {
urls: [`amqp://localhost:5672`],
queue: 'my_queue',
queueOptions: { durable: false },
},
});
await app.startAllMicroservicesAsync();
await app.listen(3001);
推荐阅读
- angular - 角度搜索过滤器 | 过滤 Firebase 数据
- javascript - 如何在不影响父元素的情况下设置子元素的 contenteditable 属性?
- python - 寻找具有较低时间复杂度的非重叠社区检测算法
- javascript - 在 HTML/Javascript 中创建交互式地图
- snowflake-cloud-data-platform - 替代雪花中的正则表达式
- python-3.x - 熊猫:条件 str.split
- javascript - 计算点后最多两位数的百分比
- javascript - Deno:请求被调用两次
- git - Gerrit 如何制作新的克隆命令或添加克隆选项?
- node.js - express app.get 通过 HTTP 而非 HTTPS 工作