【问题标题】:How to add header properties to messages using seneca-amqp-transport如何使用 seneca-amqp-transport 向消息添加标头属性
【发布时间】:2020-01-20 17:23:20
【问题描述】:

我正在做一个需要使用一些 rabbitmq 队列的项目。其中一个队列要求消息被延迟以在将来的某个时间处理。我注意到在 rabbmitmq 的文档中有一个名为 RabbitMQ 延迟消息插件的新插件,它似乎允许此功能。过去,对于基于 rabbmitmq 的项目,我使用 seneca-amqp-transport 进行消息添加和处理。问题是我没有看到任何关于 seneca 的文档,也没有找到任何概述如何添加标题属性的示例。

似乎我需要首先确保队列是使用 x-delayed-type 创建的。此外,由于每条消息都添加到队列中,我需要确保在将消息发送到rabbbitmq 之前将x-delay 标头参数添加到消息中。有没有办法通过 seneca-amqp-transport 传递这个参数,x-delay?

这是我当前用于将消息添加到队列的代码:

return new Promise((resolve, reject) => {
    const client = require('seneca')()
        .use('seneca-amqp-transport')
        .client({
            type: 'amqp',
            pin: 'action:perform_time_consuming_act',
            url: process.env.AMQP_SEND_URL
        }).ready(() => {
            client.act('action:perform_time_consuming_act', {
                message: {data: 'this is a test'}
            }, (err, res) => {
                if (err) {
                    reject(err);
                }

                resolve(true);
            });
        });
}

在上面的代码中,header相关的数据会去哪里?

【问题讨论】:

    标签: node.js rabbitmq seneca


    【解决方案1】:

    我只是在 lib/client/publisher.js 下查找了库的代码,这应该可以解决问题

    function publish(message, exchange, rk, options) {
    const opts = Object.assign({}, options, {
      replyTo: replyQueue,
      contentType: JSON_CONTENT_TYPE,
      x-delay: 5000,
      correlationId: correlationId
    });
    return ch.publish(exchange, rk, Buffer.from(message), opts);
    

    }

    试一试,应该可以的。这里的延迟值如果设置为 5000 毫秒。您还可以重载发布方法以将值作为参数。

    【讨论】:

      猜你喜欢
      • 2011-07-10
      • 2020-07-25
      • 2012-02-18
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 2015-01-23
      相关资源
      最近更新 更多