【问题标题】:My 'myQueueItem' in my Azure function producing a zero value when it gets triggered我的 Azure 函数中的“myQueueItem”在触发时产生零值
【发布时间】:2018-08-26 02:58:19
【问题描述】:

我正在像这样将消息传递到我的 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));

但是当我的函数被触发时,我收到一个异常,指出函数中的 myQueueItem0null,具体取决于我正在调用的函数。

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

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

问题 - 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);

【问题讨论】:

    标签: c# azure azure-functions azureservicebus azure-triggers


    【解决方案1】:

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

    【讨论】:

    • 我只需要从消息传递一个 id 到函数,你建议我怎么做?另外,我不明白的是我之前有这个工作并将一个id作为'myQueueItem'传递,现在它不工作了!
    • 你试过了吗 var sendCodeSequence = await queueClient.ScheduleMessageAsync(eventId.ToString(), new DateTimeOffset(enqueuedTime)); ?
    • 不,第一个参数只带一个消息对象
    • 现在我只是想知道它是否坏了,因为我想我在消息中添加了预定的排队时间。也许现在改变了它的结构,所以我可以将其作为字符串读取,而之前我只是将 id 作为字符串读取,它允许我将其作为字符串读取,而无需将其转换为对象或将其作为 Message 对象读取首先..
    • 这可能解释了它。如果要继续使用现有结构,则应将字符串 myQueueItem 替换为 BrokeredMessage myQueueItem。否则,如果您只想发送单个字符串,您可以恢复您的代码或使用 QueueClient.SendAsync()。另请在此处查看 ServiceBusTrigger 的序列化方案:github.com/Azure/azure-webjobs-sdk/wiki/…
    【解决方案2】:

    我通过在函数中传入“字符串 messageId”作为参数来解决它。我猜 Azure 消息的使用方式与 BrokeredMessages 不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      相关资源
      最近更新 更多