在使用node.js进行特定延迟后,从Azure ServiceBus主题发送消息
基本上,在Azure服务总线中,我有一个主题和订阅。
如果在上午11:00之前有消息到达话题,我的订阅者不应该处理它。 然而,在下午14:00,我希望我的订户来对待它。
有没有一种方法来实现这与本机主题filter?
在有关filter的官方文档中,我没有发现任何这种用例。
事实上,所有呈现的样本都是关于:
“ 处理这种消息的用户,或从来没有 ”。
我在找:
“ 期待处理这种消息的用户,但是在特定的时间晚点 ”。
听起来你想推迟一个消息?
不太了解有关Node.js的Azure SDK,但是从MSDN文档可以在消息上设置一个ScheduledEnqueueTimeUtc
:
按UTC预定的排队时间。 此值用于延迟邮件发送。 它被用于延迟将来发送到特定时间的消息。
只有向队列发送消息的示例是:
var message = { body: 'Test message', customProperties: { testproperty: 'TestValue' }}; serviceBusService.sendQueueMessage('myqueue', message, function(error){ if(!error){ // message sent } });
从nodejs sdk中,我find了一个定义这些属性的constants.js文件:
/** * The broker properties for service bus queue messages. * * @const * @type {string} */ BROKER_PROPERTIES_HEADER: 'brokerproperties', ... /** * The scheduled enqueue time header. * * @const * @type {string} */ SCHEDULED_ENQUEUE_TIME_HEADER: 'x-ms-scheduled-enqueue-time',
如果你看看servicebusservice.js ,有一个setRequestHeaders
函数,它接收消息的一些属性并将其设置为标题。
所以我想你可以在消息上设置这个属性:
// Set your scheduled date var scheduledDate = Date.now(); scheduledDate.setHours(scheduledDate.getHours()+3); var message = { body: 'Test message', brokerproperties: { 'x-ms-scheduled-enqueue-time': scheduledDate.toUTCString() }};
让我知道它是否工作:-)
我能够得到它使用这个工作:
const scheduledDate = new Date(); scheduledDate.setMinutes(scheduledDate.getMinutes()+1); const message = { body: 'Hey, this worked again!', customProperties: { testproperty: 'TestValue' }, brokerProperties: { ScheduledEnqueueTimeUtc: scheduledDate.toUTCString() } }; serviceBusService.sendQueueMessage('myqueue', message, function(error){ if(!error){ console.log('We sent a message. Huzzah!'); } });