Я работаю с очередью служебной шины и функцией 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.Убедитесь, что параметр Type поддерживается привязкой.Если вы используете привязки расширений (например, хранилище Azure, ServiceBus, таймеры и т. Д.), Убедитесь, что вы вызвали метод регистрации расширений в вашем коде запуска (например, builder.AddAzureStorage (), builder.AddServiceBus (), builder.AddTimers () и т. д.).
Я не совсем уверен, почему он говорит мне о коде запуска, у меня нет такой вещи, поэтому я предполагаю, что сообщение об ошибке не было 't updated ...
Чтение этой проблемы в SDK веб-заданий Azure , создается впечатление, что она должна поддерживаться (исправьте меня, если я неправильно читаю!).
Мой вопрос
Можно ли использовать MessageSender
, как это, и если да, что мне нужно сделать, чтобы это работало?