当前位置: 首页 > 知识库问答 >
问题:

将来自节点js客户端的消息放入azure服务总线中的死信队列

岑经纶
2023-03-14

我有一个azure函数,在回调函数中,它接收来自主题的消息,有时该函数无法处理该消息,然后从该节点js代码中,我想将该消息放入死信队列,稍后可能会手动处理,我试着浏览文档,我只找到了从死信中读取消息并在从service bus对象接收消息时将其放入死信的示例,在我的情况下,这是一个回调方法,因此我不需要创建service bus对象,在回拨功能中,是否有一种方法可以将消息放入死信中

我正在使用

“@azure/服务总线”:“7.0.3”

我在跟踪这个留档

https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/servicebus/service-bus/

我的职能。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);}

共有3个答案

裘臻
2023-03-14

我也在Azure总线服务上工作。

https://docs.microsoft.com/en-us/javascript/api/@azure/service-bus/servicebus接收器?查看最新的节点deadLetterMessage_ServiceBusReceivedMessage__DeadLetterOptions____key__string___any_

关于如何向DLQ传递消息的参考可以在上面的链接中找到。

基本上,您需要在所创建的接收器上调用死信消息方法。

https://github.com/Azure/azure-sdk-for-js/blob/da8d311b88dff7e93fd1835f0bf034055a8a0b2a/sdk/servicebus/service-bus/samples/javascript/advanced/movingMessagesToDLQ.js#L61-L64


    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."
    });

最重要的是,您可以禁用自动完成消息来完全控制您想要如何完成或丢弃消息或将消息移动到DLQ。

辛承
2023-03-14

从节点js函数抛出异常将消息置于死信队列中

裴俊雅
2023-03-14

我认为如果不建立基于服务总线的客户端(至少就NodeJs而言),直接向死信发送信息是不可能的。请检查基于NodeJS的触发器:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus-trigger?tabs=javascript#usage

你会发现根本没有相应的用法(如果你基于C#,这是可能的。)。

您可以尝试创建服务总线客户端,并使用致命消息

https://docs.microsoft.com/en-us/javascript/api/@azure/service-bus/servicebus接收器?查看最新的节点deadLetterMessage_ServiceBusReceivedMessage__DeadLetterOptions____key__string___any_

 类似资料:
  • > 在Azure Service Bus主题中,我有两个订阅subscription1和subscription2。我正在向主题发送一条消息。在subscription1中,消息被放弃,在subscription2中,消息被处理。subscription1中的已放弃消息是否将再次发送给两个订阅或仅发送给已放弃消息的订阅。 我也有点困惑,死信队列将是所有订阅都通用的,还是每个订阅都有一个单独的死信队

  • 我正在尝试Azure服务总线队列。我有以下代码: 队列发送: 接收代码: 我看到,每当我打电话放弃时,信息都被写上了死信。我的假设是它应该被激活,并且可以被另一个客户接收。

  • 我正在使用azure服务总线主题和订阅机制,并希望处理所有在死信队列中的消息。 此外,我想通过C#中的Azure Web作业处理消息,并将其发送回队列。所以我想知道如何通过我的应用程序处理死信队列上的消息?

  • 我已经创建了一个简单的窗口服务来使用来自Azure服务总线队列的消息。我使用TopShelch创建windows服务。下面的代码从这里剪切如下示例:https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues 高频。Run(); ServiceBusHe

  • 如何获取Azure服务总线队列中死信消息的数量? 我可以像这样得到队列中的计数。。。 但这看起来既包括队列中的消息,也包括关联死信队列中的消息 我如何区分它们?

  • 使用WebJobs SDK时,将代理消息移动到死信队列的正确方法是什么?通常我会打电话给味精。死信()。但是,SDK负责管理代理消息的生命周期。它将调用msg。如果方法返回成功,则返回Complete(),如果发生异常,则将重试该消息。我需要第三种情况,告诉ServiceBus队列将消息移动到死信队列,因为它是一条坏消息。