0

我正在做一个需要使用一些 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);
            });
        });
}

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

4

1 回答 1

0

我只是在 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 毫秒。您还可以重载发布方法以将值作为参数。

于 2019-09-20T11:42:28.860 回答