Этот вопрос похож на другие, где есть ответы, но я думаю, что с AF v2 все могло измениться (я перехожу к v2 без опыта v1). Похоже, что сборка, с которой AF v2 интегрирована для взаимодействия с ServiceBus, - это Microsoft.Azure.ServiceBus, у которого есть класс под названием «Message», который не совсем то же самое, что «BrokeredMessage», присутствующий в других сборках сервисной шины microsoft. Одно из ключевых различий между ними заключается в том, что BrokeredMessage (на который есть ссылки почти во всей документации, примерах и любом другом потоке, который я могу найти) имеет метод .Deadletter (), а Message - нет. Как я могу преднамеренно послать сообщение мертвым письмом, если у меня нет доступа к клиенту или получателю, которые его получили?

(Я видел предложения, связанные с простым клонированием сообщения, помещением моей собственной очереди «мертвых писем» и разрешением AF зафиксировать оригинал - я не считаю это подходящим решением.)

2
Brandon 23 Окт 2018 в 23:36

2 ответа

Лучший ответ

Мне еще предстоит доказать это в среде функций, но согласно тикету, который я открыл на github (https://github.com/Azure/azure-webjobs-sdk/issues/1986), webjobs v3 поддерживает привязку как Message, так и MessageReceiver, которые получили его в триггере функции, а затем MessageReceiver может использоваться для мертвой буквы сообщения.

3
Brandon 30 Окт 2018 в 16:14

Это было настоящей болью узнать, поскольку это все еще не задокументировано. Ссылка на API в файле сведений о проекте Azure SDK для .NET даже указывает на документация из старого пространства имен 🤦‍♂️

Мне пришлось просмотреть исходный код, чтобы найти правильный способ получить LockToken.

    [FunctionName("MyFunction")]
    public static async Task Run([ServiceBusTrigger("myqueue", Connection = "myconnectionstring")] Message message,
        ILogger log, MessageReceiver messageReceiver)
    {
        await messageReceiver.DeadLetterAsync(message.SystemProperties.LockToken);
    }

Ввод MessageReceiver в качестве параметра с автоматической привязкой, никаких дополнительных настроек не требуется.

1
Amicable 15 Янв 2020 в 00:44
52957479