在使用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!'); } });