【发布时间】:2019-06-22 23:50:58
【问题描述】:
我正在使用服务总线队列和 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、计时器等),请确保您已在启动代码中调用了扩展的注册方法(例如 builder.AddAzureStorage()、builder.AddServiceBus( )、builder.AddTimers() 等)。
我不太清楚为什么它告诉我启动代码,我没有这样的东西,所以我猜错误消息没有更新......
阅读this issue on the Azure webjobs SDK,我觉得应该支持它(如果我读错了,请纠正我!)。
我的问题
是否可以像这样使用MessageSender,如果可以,我需要做什么才能使其工作?
【问题讨论】:
标签: c# .net-core azure-functions azureservicebus azure-servicebus-queues