Как привязать MessageSender в функции Azure? - PullRequest
0 голосов
/ 29 января 2019

Я работаю с очередью служебной шины и функцией 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, как это, и если да, что мне нужно сделать, чтобы это работало?

1 Ответ

0 голосов
/ 30 января 2019

Ваша функция использует ServiceBusTrigger, который поддерживает MessageReceiver, но не привязку MessageSender - это поддерживается выходной привязкой ServiceBus, которую вы можете добавить в свою функцию.( Пример )

...