简介
egg-amqp 是一个 RabbitMQ 的 Egg.js 插件, 可以用来连接和订阅 RabbitMQ, 异步的处理消息队列中的任务。通常,用 RabbitMQ 来处理消息队列, 会是我们架构分布式系统中必不可少的一步。在 Egg.js 中,egg-amqp 会帮助我们处理 RabbitMQ。
安装
你可以使用 npm 来安装 egg-amqp, 如下所示:
npm install egg-amqp
安装后,可以通过 egg-amqp 插件中间件便可轻松的使用 RabbitMQ。
用法
- 首先,在配置中添加相应的配置(不同的开发环境不同的配置):
-- -------------------- ---- ------- -- ------------------------ ------------ - - -------- - -- ------- -------- - -- ---- ---- ------------------------ -- -------- ------- -- -------- - -- ------ ------- ------------ -- ----------------- ------- -------- ----- -- -- -------- -------------- - -- ---------------- ------- - -- ------------- --------- ------- -- -------- ------ - ---------- ----- -- -- --------- -------- ----- - ---- -- -- - ------------------------------------ -- ---- -------------- -- -- -- -- -- --
- 之后, 在 app.js 启用 middleware:
// app.js module.exports = app => { app.messenger.once(`egg-ready`, async () => { // 关键代码: 连接 RabbitMQ await app.amqp.connect(`default`); }); };
- 最后在具体的 api 中使用
-- -------------------- ---- ------- -- -------------------------- ---- -------- ----- ---------- - -------------------------- -- --- ----- ------------------ ------- ---------- - ----- --------- - ----- - --- - - ----- ----- ------- - ------------------------- -- ---- ----- ---------------------- -------- - ----------- ------ ----------- ----- --- -------- - - ------- --------- -- - -- --- ----- --------- - ----- - --- - - ----- ----- ------------------------ ----- ------------- - ----- ------------ --------------------------------- ------- -------- ---------------------------- -- ------ ------------------ --- -------- - - ------- --------- -- - - -- -- -------- --------- - ------ --- --------------- -- ------------------- ----- - -------------- - -------------------
这将使该 controller 变成一个生产者, 可以发送消息。另外, 利用 async subprocess()
和 await
, 我们变成了一个消费者,可以异步的处理消息。
结语
以上就是 egg-amqp 插件的使用教程, 还是非常简单易用的。希望能对刚刚接触 RabbitMQ 的小伙伴们有所帮助。如果您以前一直使用 AMQP,那么如果接受以下的异步编程转变,您肯定会喜欢这种暴露出 Promise 对象的API.
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005671a81e8991b448e370d