我正在使用服务总线队列和Azure函数。失败的处理方式取决于某些业务逻辑。有些消息需要发送到死信队列,其他消息则需要修改然后显式添加回队列。
考虑以下代码:
[FunctionName("ServiceBusTask")]
public static async Task Run(
[ServiceBusTrigger("myQueue", Connection = "myConnectionString")]
Message message,
MessageReceiver messageReceiver,
//MessageSender messageSender,
ILogger log)
{
//some business logic that can fail
if( condition for dead letter)
{
await messageReceiver.DeadLetterAsync(message.SystemProperties.LockToken);
}
else if( condition for a manual retry)
{
QueueClient qc = new Queueclient("myQueue", "myConnectionString");
Message updatedMessage = GetUpdatedMessage(message);
await qc.SendAsync(updatedMessage);
//await messageSender.SendAsync(updatedMessage);
}
}
messageReceiver可以很好地将消息发送到死信队列,但是让我感到困扰的是,我需要创建一个QueueClient
才能将消息发送到队列。知道MessageSender
存在后,我尝试将其添加到参数中,但出现一条错误消息:
无法将参数'messageSender'绑定为MessageSender类型。确保绑定支持参数类型。如果您使用绑定扩展(例如Azure存储,ServiceBus,Timer等),请确保已在启动代码中调用了扩展的注册方法(例如builder.AddAzureStorage(),builder.AddServiceBus( ),builder.AddTimers()等)。
我不太确定为什么要告诉我有关启动代码的信息,我没有这样的事情,所以我猜错误消息没有更新...
阅读this issue on the Azure webjobs SDK时,我得到它应该受到支持的印象(如果我读错了,请纠正我!)。
我的问题
是否可以像这样使用MessageSender
,如果可以,我该怎么做才能使其正常工作?
答案 0 :(得分:2)
您的函数正在使用ServiceBusTrigger
,它支持MessageReceiver
,但不支持MessageSender
绑定-ServiceBus
输出绑定支持,您可以将其添加到您的功能。 (example)