RabbitMQ
在复杂系统的架构中,会有负责处理消息队列的微服务,如下图:服务A负责产生消息给消息队列,而服务B则负责消费消息队列中的任务。
在Midway中,我们提供了订阅rabbitMQ的能力,专门来满足用户的这类需求。
相关信息:
订阅服务
描述 | |
---|---|
可用于标准项目 | ✅ |
可用于 Serverless | ❌ |
可用于一体化 | ✅ |
包含独立主框架 | ✅ |
包含独立日志 | ❌ |
基础概念
RabbitMQ 的概念较为复杂,其基于高级消息队列协议即 Advanced Message Queuing Protocol(AMQP),如果第一次接触请阅读一下相关的参考文档。
AMQP 有一些概念,Queue、Exchange 和 Binding 构成了 AMQP 协议的核心,包括:
- Producer:消息生产者,即投递消息的程序。
- Broker:消息队列服务器实体。
- Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
- Binding:绑定,它的作用就是把 Exchange 和 Queue 按照路由规则绑定起来。
- Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
- Consumer:消息消费者,即接受消息的程序。
简单的理解,消息通过 Publisher 发布到 Exchange(交换机),Consumer 通过订阅 Queue 来接受消息,Exchange 和 Queue 通过路由做连接。
消费者(Consumer)使用方法
安装依赖
Midway 提供了订阅 rabbitMQ 的能力,并能够独立部署和使用。安装 @midwayjs/rabbitmq
模块及其定义。
$ npm i @midwayjs/rabbitmq@3 --save
$ npm i amqplib --save
$ npm i @types/amqplib --save-dev
或者在 package.json
中增加如下依赖后,重新安装。
{
"dependencies": {
"@midwayjs/rabbitmq": "^3.0.0",
"amqplib": "^0.10.1",
// ...
},
"devDependencies": {
"@types/amqplib": "^0.8.2",
// ...
}
}
开启组件
@midwayjs/rabbmitmq
可以作为独立主框架使用。
// src/configuration.ts
import { Configuration } from '@midwayjs/core';
import * as rabbitmq from '@midwayjs/rabbitmq';
@Configuration({
imports: [
rabbitmq
],
// ...
})
export class MainConfiguration {
async onReady() {
// ...
}
}
也可以附加在其他的主框架下,比如 @midwayjs/koa
。
// src/configuration.ts
import { Configuration } from '@midwayjs/core';
import * as koa from '@midwayjs/koa';
import * as rabbitmq from '@midwayjs/rabbitmq';
@Configuration({
imports: [
koa,
rabbitmq
],
// ...
})
export class MainConfiguration {
async onReady() {
// ...
}
}