2

基本上,在 Azure 服务总线中,我有一个主题和一个订阅。

如果消息在上午 11:00 之间到达主题,我的订阅者应该还没有处理它。但是,在下午 14:00,我希望我的订阅者能够处理它。

有没有办法使用主题过滤器本地实现这一点?

我在有关过滤器的官方文档中没有找到任何提及这种用例的内容。
事实上,所有展示的示例都是关于:
订阅者处理这种消息,或者永远不会”。
我正在寻找:
订阅者希望处理这种消息,但是稍后在特定时间”。

4

2 回答 2

3

听起来你想推迟消息?

对 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 中,我找到了一个定义这些属性的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()
}};

让我知道它是否有效:-)

于 2016-08-24T10:09:01.173 回答
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!');
        }
    });
于 2016-12-20T18:18:28.557 回答