Этот вопрос похож на другие, где есть ответы, но я думаю, что с AF v2 все могло измениться (я перехожу к v2 без опыта v1). Похоже, что сборка, с которой AF v2 интегрирована для взаимодействия с ServiceBus, - это Microsoft.Azure.ServiceBus, у которого есть класс под названием «Message», который не совсем то же самое, что «BrokeredMessage», присутствующий в других сборках сервисной шины microsoft. Одно из ключевых различий между ними заключается в том, что BrokeredMessage (на который есть ссылки почти во всей документации, примерах и любом другом потоке, который я могу найти) имеет метод .Deadletter (), а Message - нет. Как я могу преднамеренно послать сообщение мертвым письмом, если у меня нет доступа к клиенту или получателю, которые его получили?
(Я видел предложения, связанные с простым клонированием сообщения, помещением моей собственной очереди «мертвых писем» и разрешением AF зафиксировать оригинал - я не считаю это подходящим решением.)
2 ответа
Мне еще предстоит доказать это в среде функций, но согласно тикету, который я открыл на github (https://github.com/Azure/azure-webjobs-sdk/issues/1986), webjobs v3 поддерживает привязку как Message, так и MessageReceiver, которые получили его в триггере функции, а затем MessageReceiver может использоваться для мертвой буквы сообщения.
Это было настоящей болью узнать, поскольку это все еще не задокументировано. Ссылка на 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 в качестве параметра с автоматической привязкой, никаких дополнительных настроек не требуется.
Похожие вопросы
Новые вопросы
azure
Microsoft Azure - это платформа для облачных вычислений «Платформа как услуга» и «Инфраструктура как услуга». Используйте этот тег для вопросов по программированию, касающихся Azure. Общая справка по серверу может быть получена в разделе «Суперпользователь» или «Ошибка сервера».