2016-08-24 94 views
2

基本上,在Azure服务总线中,我有一个主题和一个订阅。通过node.js发送特定延迟后,从Azure ServiceBus主题发送消息

如果邮件在11:00 AM之前到达主题,我的订阅者不应该处理它。 但是,在下午14:00,我希望我的订户能够对待它。

有没有一种方法可以使用Topic过滤器本地实现此功能?

在关于过滤器的官方文档中,我没有发现任何此类用例的提及。
实际上,所有呈现的样本都是关于:
订户处理这种消息,或者从来没有”。
我在寻找:
”用户期待处理这种消息,但后来在特定时间“。

回答

2

听起来像你想推迟一条消息?

不知道太多关于Azure SDK for Node.js但是从MSDN Documentation您可以在消息中设置一个ScheduledEnqueueTimeUtc

在UTC的预定排队时间。此值用于延迟邮件发送。它被用来将消息发送延迟到特定的时间。

只有样品send a message to a Queue是:

var message = { 
    body: 'Test message', 
    customProperties: { 
     testproperty: 'TestValue' 
}}; 
serviceBusService.sendQueueMessage('myqueue', message, function(error){ 
    if(!error){ 
     // message sent 
    } 
}); 

从的NodeJS SDK中,我发现了一个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() 
}}; 

让我知道,如果它:-)

+0

我会在本周测试它,我会让你知道那里:)谢谢。 – Mik378

+0

@ Mik378,你是否设法让它工作? :-) – Thomas

+0

它似乎工作,我的团队将做一些其他测试来验证这一点;) – Mik378

0

我能够得到它使用这个工作:

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