从逻辑应用程序设置死信原因

Posted

技术标签:

【中文标题】从逻辑应用程序设置死信原因【英文标题】:Set Dead letter reason from logic app 【发布时间】:2018-02-28 07:49:50 【问题描述】:

我们有一个逻辑应用程序,它可以从队列和主题中查看消息,处理消息,然后在所有操作都成功时完成消息,如果发生错误,则消息是死信。为了组织我们的死信队列,我们​​想要关联一个原因来指示发生了什么错误。但是,开箱即用的服务总线连接器似乎没有设置死信原因的选项。

有谁知道是否可以?如果是,请分享如何做到这一点。

在尝试使用 Azure 函数时,我遇到了如何将 BrokeredMessage 实例从逻辑应用传递到 Azure 函数的问题。尝试打电话时,我得到以下选项。

【问题讨论】:

您是正确的,连接器当前不允许您设置 DeadLetterReason 或 DeadLetterErrorDescription 属性。但是您可以使用 Azure 函数来自定义此行为。 我也有同样的想法,但卡在获取代理消息的实例以调用 Deadletter 方法。你有运气吗? but got stuck on getting an instance of the brokered message to call the Deadletter method你能分享一些演示代码或更多信息吗? 我已通过调用 Azure 函数更新了帖子。我看不到如何将对象从逻辑应用程序传递给函数。我正在为函数使用 http 触发器。 我们可以将你想要的对象传递给 body 字段。正文取决于您在 Httptrigger 函数中实现的内容。 【参考方案1】:

我看不到如何将对象从逻辑应用传递到函数。我正在为函数使用 http 触发器。

我们可以将对象传递给 body 字段。正文取决于您在 Azure 函数中实现的内容。

它在我这边工作正常。以下是我的详细测试步骤:

1.创建一个逻辑App设计如下

2.使用以下代码创建一个HttpTrigger函数。

using System.Net;
using System;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)

    log.Info("C# HTTP trigger function processed a request.");

     dynamic data = await req.Content.ReadAsAsync<object>();
     var messageId =data?.MessageId;
     //To Do
     return req.CreateResponse(HttpStatusCode.OK,"successful!");//return what you wanted

3.向 Azure 服务总线发送消息。

4.从逻辑应用检查

【讨论】:

我尝试将签名设置为如下函数:Run(HttpRequestMessage req, TraceWriter log)。我收到错误“执行函数时出现异常:Functions.HttpTriggerCSharp2。Microsoft.Azure.WebJobs.Host:异常绑定参数'req'。Newtonsoft.Json:将值“9223372036854775807”转换为输入“System.TimeSpan”时出错。路径“TimeToLive” ',第 1 行,位置 977。Newtonsoft.Json:无法从 System.String 转换或转换为 System.TimeSpan。”。任何线索如何避免?我想我不能只用消息文本来死信。【参考方案2】:

您无法传递 BrokeredMessage,因此看来您现在能做的最好的事情就是希望您不要将延迟功能用于其他任何事情,然后:

1) 延迟来自逻辑应用的消息(连接器:延迟队列中的消息)

2) 调用您的 Azure 函数并将消息序列号、原因和描述传递给它。在函数中,您可以使用序列号检索延迟消息。现在您有了一个 BrokeredMessage 对象,您可以使用您传递的其他信息进行死信。

【讨论】:

以上是关于从逻辑应用程序设置死信原因的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ——死信队列的三大来源应用举例

RabbitMQ——死信队列的三大来源应用举例

为啥将消息放入死信队列 (MSMQ)?

RabbitMQ中的死信队列

为什么将消息放入死信队列(MSMQ)?

RabbitMQ-死信队列