У меня есть проект .NET Standard 2.0, который определяет функции Azure. У меня есть пара функций BlobTrigger и QueueTrigger, которые работают должным образом. Я пытаюсь заменить функции QueueTrigger учетной записи хранения функциями триггеров темы ServiceBus:
[FunctionName("CommandConsumer")]
public static async Task RunAsync([ServiceBusTrigger("commands", "active", Connection = "ServiceBus")]string commandJson, TraceWriter log)
{
log.Info($"C# ServiceBus topic trigger function processed message: {commandJson}");
}
Эта функция никогда не запускается, даже если восходящие функции успешно добавляют сообщения в тему (я вижу, что у меня сейчас 25 сообщений по теме), и в моем окне консоли отображается много таких сообщений:
[9/13/2018 7:13:29 PM] MessageReceiver error (Action=Receive, ClientId=MessageReceiver1commands/Subscriptions/active, EntityPath=commands/Subscriptions/active, Endpoint=p.servicebus.windows.net)
[9/13/2018 7:14:06 PM] MessageReceiver error (Action=Receive, ClientId=MessageReceiver1commands/Subscriptions/active, EntityPath=commands/Subscriptions/active, Endpoint=p.servicebus.windows.net)
[9/13/2018 7:14:42 PM] MessageReceiver error (Action=Receive, ClientId=MessageReceiver1commands/Subscriptions/active, EntityPath=commands/Subscriptions/active, Endpoint=p.servicebus.windows.net)
Я установил трассировку в режим «Подробная информация», но я не могу получить более подробную информацию об этой ошибке MessageReceiver.
Заранее спасибо!
Обновлено: вот соответствующие ссылки на пакеты проекта:
<PackageReference Include = "Microsoft.Azure.ServiceBus" Version = "3.1.0" />
<PackageReference Include = "Microsoft.Azure.WebJobs.Extensions.Storage" Version = "3.0.0-beta8" />
<PackageReference Include = "Microsoft.Azure.WebJobs.ServiceBus" Version = "3.0.0-beta8" />
<PackageReference Include = "Microsoft.NET.Sdk.Functions" Version = "1.0.19" />
Ошибок отправки сообщений в тему нет: public async Task<bool> SubmitAsync<T>(IEnumerable<T> commands) where T : Command { var messages = commands.Select(c => new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(c)))); await topicClient.SendAsync(messages.ToList()); return true; }
Мы допустили ошибку в наших шаблонах Azure и имели дублированные ключи для некоторых ключей доступа KeyVault, что привело к сбою вызова функции Azure из-за «Доступ запрещен» к KeyVault. К сожалению, окно вывода не отображало эти внутренние исключения при локальном запуске, но когда мы запустили тот же код в Azure, мы увидели исключения в потоке Live Metrics Stream и смогли отследить и исправить повторяющиеся ключи.
Согласно вашему сообщению об ошибке, вам кажется, что вам нужно проверить тип вашего сообщения при отправке сообщения. Кроме того, какая платформа при отправке сообщения v2.