0

我像这样将消息传递到我的 Azure 服务总线队列,其中“MessageId”值是一个数字字符串。'345'。我在 Azure 门户仪表板的队列中看到它,当我在服务总线资源管理器中查看消息时,我看到消息 id 作为我正在传递的 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函数中的 the 是0ornull,具体取决于我正在调用的函数。

这是给我这个问题的一个函数的前几行代码。该事件始终为 null 并引发异常,因为myQueueItem始终为nullor0

我想,我以前有这个工作,但现在我认为每次触发我的函数时都会进行更改并抛出异常!

问题 -myQueueItem当我创建消息并将消息放入队列时,我传递的不是 messageId 吗?

[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);
4

2 回答 2

0

myQueueItem 是消息本身。如果您使用了代理消息或服务总线消息并添加了要在函数中使用的其他信息,则 string myQueueItem 并不是真的有用。您应该替换string myQueueItemMicrosoft.Azure.ServiceBus.Message myQueueItem. 如果需要,还可以查看这篇文章中的实现,了解有关序列化/反序列化消息的一些其他有用信息:Azure ServiceBus Message Serialization/Deserialization

于 2018-08-26T04:35:03.297 回答
0

我通过将'string messageId'作为函数中的参数传递来解决它。我猜 Azure 消息的使用方式与 BrokeredMessages 不同。

于 2018-08-27T17:45:45.890 回答