Мой 'myQueueItem' в моей функции Azure выдает нулевое значение при срабатывании
Я передаю сообщения в свою очередь служебной шины Azure следующим образом, где значение "MessageId" представляет собой строку числа ex. '345'. Я вижу его в очереди на панели мониторинга портала Azure, и когда я просматриваю сообщение в Service Bus Explorer, я вижу идентификатор сообщения как eventId, который я передаю.
Message message = new Message
{
MessageId = eventId.ToString(), // passing it a value of '123'
ScheduledEnqueueTimeUtc = enqueuedTime
};
var sendCodeSequence = await queueClient.ScheduleMessageAsync(message, new DateTimeOffset(enqueuedTime));
Но когда моя функция срабатывает, я получаю исключение, говорящее myQueueItem
из функции либо 0
или жеnull
в зависимости от того, какую функцию я вызываю.
Вот первая пара строк кода для одной из функций, которые дают мне эту проблему. Событие всегда равно нулю и выдает исключение, потому что myQueueItem
всегда null
или же0
,
Я думал, что раньше это работало, но теперь я думаю, что были внесены изменения и выбрасывались исключения при каждом срабатывании моих функций!
Вопрос - есть myQueueItem
не сообщение, которое я передаю, когда создаю и помещаю сообщение в очередь?
[FunctionName("CancelEvent")]
public static void Run([ServiceBusTrigger("canceleventqueue", AccessRights.Manage, Connection = "events2017_RootManageSharedAccessKey_SERVICEBUS")]string myQueueItem, TraceWriter log, ExecutionContext context)
{
try
{
log.Info($"Cancel event started id: {myQueueItem}");
var eventId = Convert.ToInt32(myQueueItem);
using (var dbContext = new EventContext(myDatabaseConnectionString))
{
var event = dbContext.Events.Where(i => i.EventId == eventId).FirstOrDefault();
if (Event == null)
throw new Exception("no event with this id: " + myQueueItem);
2 ответа
myQueueItem - это само сообщение. Строка myQueueItem не очень полезна, если вы использовали брокерское сообщение или сообщение служебной шины и добавили другую информацию, которую хотите использовать в функции. Вы должны заменить string myQueueItem
с Microsoft.Azure.ServiceBus.Message myQueueItem
, Также просмотрите реализацию в этом посте для получения другой полезной информации о сериализации / десериализации сообщения при необходимости: Сериализация / десериализация сообщений Azure ServiceBus
Я решил это, передав в качестве параметра функции 'string messageId'. Я думаю, что сообщения Azure используются иначе, чем BrokeredMessages.