在 node.js 的特定延迟后从 Azure ServiceBus 主题发送消息
Send message from an Azure ServiceBus Topic after a specific delay with node.js
基本上,在 Azure 服务总线中,我有一个主题和一个订阅。
如果消息在 11:00AM 之间到达主题,我的订阅者应该还没有处理它。
但是,在 14:00PM,我希望我的订户能够接受它。
有没有办法通过主题过滤器在本地实现这一点?
我在有关过滤器的官方文档中找不到任何提及此类用例的内容。
事实上,所有展示的样本都是关于:
“订户处理此类消息,否则永远不会”。
我在寻找:
“订阅者希望处理此类消息,但是,但稍后会在特定时间”。
听起来您想推迟留言?
不太了解 Azure SDK for Node.js but from the MSDN Documentation 可以在留言上设置一个 ScheduledEnqueueTimeUtc
:
The scheduled enqueue time in UTC. This value is for delayed message sending. It is utilized to delay messages sending to a specific time in the future.
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
函数可以获取消息的某些属性并将其设置为 header。
所以我猜你可以像这样在消息上设置这个 属性 :
// 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!');
}
});
基本上,在 Azure 服务总线中,我有一个主题和一个订阅。
如果消息在 11:00AM 之间到达主题,我的订阅者应该还没有处理它。 但是,在 14:00PM,我希望我的订户能够接受它。
有没有办法通过主题过滤器在本地实现这一点?
我在有关过滤器的官方文档中找不到任何提及此类用例的内容。
事实上,所有展示的样本都是关于:
“订户处理此类消息,否则永远不会”。
我在寻找:
“订阅者希望处理此类消息,但是,但稍后会在特定时间”。
听起来您想推迟留言?
不太了解 Azure SDK for Node.js but from the MSDN Documentation 可以在留言上设置一个 ScheduledEnqueueTimeUtc
:
The scheduled enqueue time in UTC. This value is for delayed message sending. It is utilized to delay messages sending to a specific time in the future.
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
函数可以获取消息的某些属性并将其设置为 header。
所以我猜你可以像这样在消息上设置这个 属性 :
// 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!');
}
});