我有一个 azure 函数,在回调函数中它从主题接收一条消息,有时当函数无法处理消息时,然后从这个节点 js 代码我想将该消息置于死地稍后可能会手动处理的信件队列,我尝试浏览文档,我只找到了从死信中读取消息并将其放入死信的示例,同时从服务总线对象接收它,在我的情况下它是一个回调方法所以我不需要创建服务总线对象,有没有办法在回调函数中将消息放入死信中
我正在使用
"@azure/service-bus": "7.0.3"
我一直在关注这个文档
https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/servicebus/service-bus/
我的 function.json 是:
{
"bindings": [
{
"name": "sbMessage",
"type": "serviceBusTrigger",
"direction": "in",
"topicName": "dummy-topic-name",
"subscriptionName": "dummy_subscription",
"connection": "AzureWebJobsServiceBus"
}
]
}
在这个自述文件中,它有一个从死信中读取的示例:
https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/servicebus/service-bus/samples/typescript/src/advanced/movingMessagesToDLQ.ts
我在此回调中收到消息:
示例代码:
module.exports = async function (context, sbMessage) {
context.log('ServiceBus message', sbMessage);}
答案 0 :(得分:0)
我认为不建立基于服务总线的客户端是不可能直接向死信发送信息的(至少就NodeJs而言)。请检查基于NodeJS的触发器:
你会发现根本没有对应的用法(如果你是基于C#的,是可以的。)
您可以尝试创建服务总线客户端并使用deadLetterMessage
:
答案 1 :(得分:0)
node js 函数抛出异常会将消息放入死信队列
答案 2 :(得分:0)
我也在研究 Azure 总线服务。
可以在上面的链接中找到有关如何将消息传递给 DLQ 的参考。
基本上,您需要在您创建的 deadLetterMessage
上调用 Receiver
方法。
const connectionString = process.env.SERVICEBUS_CONNECTION_STRING || "<connection string>";
const queueName = process.env.QUEUE_NAME || "<queue name>";
const sbClient = new ServiceBusClient(connectionString);
const receiver = sbClient.createReceiver(queueName);
await receiver.deadLetterMessage(messages[0], {
deadLetterReason: "Incorrect Recipe type",
deadLetterErrorDescription: "Recipe type does not match preferences."
});
最重要的是,您可以禁用 autoCompleteMessages
以完全控制您希望如何完成或丢弃或移动消息到 DLQ。
答案 3 :(得分:0)