#azure-functions #.net-5 #azure-servicebus-queues
Вопрос:
Может ли кто-нибудь предоставить пример кода для функции Azure в .NET 5, которая использует IAsyncCollector для добавления нескольких сообщений в служебную шину?
Ответ №1:
IAsyncCollector
в настоящее время не поддерживается с помощью пакета SDK для внепроцессных / рабочих процессов в соответствии с документацией:
Потому что.В изолированных проектах, выполняемых в отдельном рабочем процессе, привязки не могут использовать преимущества богатых классов привязки, таких как ICollector, IAsyncCollector и CloudBlockBlob. Также отсутствует прямая поддержка типов, унаследованных от базовых пакетов SDK служб, таких как DocumentClient и BrokeredMessage. Вместо этого привязки основаны на строках, массивах и сериализуемых типах, таких как простые старые объекты класса (POCOs).
В документации неясно, как этого добиться. Эта проблема подчеркивает, что с помощью выделенного класса с ServiceBusOutput
атрибутом свойства коллекции можно отправлять сериализованные несколько значений в виде отдельных сообщений. Например:
[Function("OneToMany")]
public static DispatchedMessages Run([ServiceBusTrigger("myqueue",
Connection = "AzureServiceBus")] string myQueueItem,
FunctionContext context)
{
// Generate 5 messages
var messages = new List<MyMessage>();
for (var i = 0; i < 5; i )
{
var message = new MyMessage { Value = $"Message #{i}" };
messages.Add(message);
}
return new DispatchedMessages
{
Messages = messages.Select(x => JsonSerializer.Serialize(x))
};
}
Где каждое сообщение будет иметь тип MyMessage
:
class MyMessage
{
public string Value { get; set; }
}
И функция вернет его как DispatchedMessages
тип, обладающий свойством Messages
, которое будет представлять все сообщения, которые необходимо отправить в виде сериализованных строк:
public class DispatchedMessages
{
[ServiceBusOutput(queueOrTopicName: "dest", Connection = "AzureServiceBus")]
public IEnumerable<string> Messages { get; set; }
}
Обратите внимание, что имя строки подключения необходимо, так как по умолчанию функции SDK будут пытаться использовать AzureWebJobsServiceBus
имя строки подключения.
Как только функция будет завершена, в очереди будет 5 сообщений dest
с содержимым JSON сериализованных MyMessage
сообщений.