2016-08-24 71 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!'); 
     } 
    }); 
相關問題