简介
当我们需要在前端应用中使用 RabbitMQ 时,往往需要与 amqplib
库进行交互。amqplib
是一个 Node.js 库,专门用于与 RabbitMQ 进行交互,提供了 RabbitMQ 的基本功能。但由于 amqplib
并没有在其中定义所有类型和属性,因此我们需要引入 @types/amqplib
等类型声明包来提供类型引导和错误检测。
本文将介绍如何使用 npm
包 @types/amqplib
,并提供使用的示例代码。
安装
使用命令行工具进入你的工程目录,执行以下命令即可安装 @types/amqplib
:
npm install @types/amqplib
基本使用
使用 amqplib
连接 RabbitMQ 的代码示例:
-- -------------------- ---- ------- ------ - -- ---- ---- ---------- ----- -------- --------- - ----- ---------- - ----- --------------------------------- ----- ------- - ----- --------------------------- ----- ---------------------------- - -------- ----- --- ------------- --- ------- --- -------- -- --- -- ---- ----- -------- --------- ------------------------ ----- -- - ------------- --- -------- ---- ------------------------ -- - ------ ---- --- - -------------------------------
你也可以使用 channel
发送消息,并监听消息是否被消费:
channel.sendToQueue('hello', Buffer.from('Hello World!')); channel.consume('hello', (msg) => { console.log(" [x] Received %s", msg.content.toString()); }, { noAck: true });
类型声明
在正式使用 @types/amqplib
前首先需要了解一些基本的类型声明。amqplib
具备以下类型:
- connect(url: string, [socketOptions?: any]): 连接到 AMQP 服务器。
- createChannel(): 创建一个新的通道。
- assertQueue(queue: string, [options?: Options.AssertQueue]): 确认队列是否存在,不存在则创建。
- sendToQueue(queue: string, content: Buffer, [options?: Options.Publish]): 将消息发送到队列中。
- consume(queue: string, onMessage: (msg: Message) => any, [options?: Options.Consume]): 从队列中消费消息。
- Message: 消息对象,包括如下属性:
- content: 消息内容,结构可以是
Buffer
或者是string
。 - properties: 消息属性。
- fields: 消息头。
- content: 消息内容,结构可以是
完整示例
下面是一个可以直接运行的完整示例:
-- -------------------- ---- ------- ------ - -- ------- ---- ---------- --------- ----- - -------- ------- --------- --------- ------- ------- - ----- -------- ------- - ----- ---------- - ----- ------------------------------------ ----- ------- - ----- --------------------------- ----- --------- - -------- ----- ------------------------------ - -------- ---- --- --------------------- -- -------------- -- -------- ----- -------------------- -------------------------- ----- -- - ----- ------------- - ----------------------- ----- ------ ----- - -------------------------- ----------------------- ----- -------------------- ------------- -- - ---------------------- ----- -------------------- ----------------- -- ------ -- - ------ ----- --- - ----- -------- --------- - ----- ---------- - ----- ------------------------------------ ----- ------- - ----- --------------------------- ----- --------- - -------- ----- ------------------------------ - -------- ---- --- --------------------- -- -------------- -- -------- -------------- -- - ----- ------ ----- - - -------- -------------------------------- - ------- --------- ---------- ------- ----------- ------- ----------------------- - ---- -- ----- ------------- - ---------------------- ------------------------------ --------------------------- - ----------- ---- --- ----------------- ----- -------------------- -- ------ - --------------------- ------------
在这个示例中,有一个队列 order
,有两个角色:生产者与消费者。
生产者每秒钟会产生一个订单,将订单内容作为消息发送到队列中;而消费者则会从队列中获取消息,处理完成后发送回确认消息给 RabbitMQ,并且每次只取一条消息来处理。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/98170