我有一个带有服务总线输入属性和服务总线输出属性集的天蓝色函数。
这意味着我从此函数返回的所有内容都将返回到“返回”队列。
但是,我想手动处理一些消息,因为没有必要重试它们,我只想将它们直接放在LDQ上并继续。
所以我添加了MessageReceiver作为带有lockToken的参数。
都好。
但是现在,如果我处理该消息并发送给DLQ,则由于期望返回,因此无法正常结束该函数的执行。所以我抛出一个例外。但是现在我在输出中有很多错误日志,例如“锁无效”。
我试图将自动完成设置为false,但是我遇到了另一个问题。我如何确保我可以返回消息并将其记录在事务中并处理回滚?
有指导吗?
例:
public static class Function1
{
[FunctionName("Function1")]
[return: ServiceBus("returnQueueName", Connection = "myConnectionString")]
public static async System.Threading.Tasks.Task<ReturnMessage> RunAsync([ServiceBusTrigger("mytopic", "mysubscription", Connection = "myConnectionString")]
string mySbMsg, ILogger log,
MessageReceiver messageReceiver, string lockToken)
{
log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
await messageReceiver.DeadLetterAsync(lockToken);
return new ReturnMessage();
}
}
public class ReturnMessage
{
public string Payload { get; set; }
}
希望您可以看到输入队列和输出队列由托管系统-Azure处理。我喜欢这个,因为它将为我照顾原子力。
但是,如果我加入这一行:
await messageReceiver.DeadLetterAsync(lockToken);
这会将当前消息移至DLQ。
大!!!这就是我想要的。
但是我现在不得不返回某些东西或抛出异常。有什么办法解决这个问题,因为看到错误消息是令人误解的,因为没有后续错误。
据我所知,您似乎不应使用自动回程服务总线绑定。相反,您应该手动连接到返回主题/队列并手动处理消息后勤。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句