具有服务总线触发器的Azure Function中的自动转发消息

时间:2018-07-24 17:24:14

标签: c# azure azure-functions azureservicebus

当我有自动转发队列时,Azure功能无法启动:

函数XXX错误:函数'FunctionXXX'的侦听器无法启动。 Microsoft.ServiceBus:无法在启用了自动转发的实体上创建消息接收器。

            // Code to create the queue:
            var manager = NamespaceManager.CreateFromConnectionString("ConnectionString");
            manager.CreateQueue(new QueueDescription("myqueue_done")
            {
                RequiresSession = false
            });
            manager.CreateQueue(new QueueDescription("myqueue")
            {
                ForwardTo = "myqueue_done",
                RequiresSession = false
            });

这是我的azure函数:

    [FunctionName("FunctionXXX")]
    public static void Run([ServiceBusTrigger("myqueue", Connection = "AzureSbConnectionString")]string myQueueItem, string messageId, string CorrelationId, TraceWriter log)
    {          

        log.Info($"Message id={messageId}, CorrelationId={CorrelationId}, was processed: {myQueueItem}");
    }

这真的是一个限制吗?有没有更好的方法可以在这种Azure函数沙箱方法内移动处理过的消息?

谢谢!

1 个答案:

答案 0 :(得分:1)

这不是功能的限制,而是服务总线的工作方式。

  

启用自动转发后,Service Bus会自动删除放置在第一个队列或订阅(源)中的消息,并将其放入第二个队列或主题(目的地)中。

如果您的邮件转发到另一个队列并从原始队列中删除,则从同一队列中创建手动接收者实际上没有任何意义。