进入Webjob SDK函数时,TriggeredFunctionData为null

时间:2017-08-15 11:02:31

标签: rabbitmq azure-webjobssdk

我正在尝试对webjob SDK(https://github.com/Sarmaad/WebJobs.Extensions.RabbitMQ)使用rabbitMQ扩展,以便在将某些内容放入队列时触发它。

触发工作正常,但内容永远不会传递到我的函数中。

我下载了扩展程序的源代码,因此我可以在其中进行调试,并且我看到队列的内容已成功传递,并且扩展程序将其重新打包为TriggeredFunctionData对象。然后通过Webjob执行器将对象传递给我的函数。 但是当我进入我的函数时,这个对象是null。

扩展程序lib的监听器方法:

        _consumer.Received += (sender, args) =>
        {
            var triggerValue = new RabbitQueueTriggerValue {MessageBytes = args.Body};
            if (args.BasicProperties != null)
            {
                triggerValue.MessageId = args.BasicProperties.MessageId;
                triggerValue.ApplicationId = args.BasicProperties.AppId;
                triggerValue.ContentType = args.BasicProperties.ContentType;
                triggerValue.CorrelationId = args.BasicProperties.CorrelationId;
                triggerValue.Headers = args.BasicProperties.Headers;
            }

            var result = _executor.TryExecuteAsync(new TriggeredFunctionData{TriggerValue = triggerValue}, CancellationToken.None).Result;

调试时我可以看到Triggervalue包含我的消息数据。

我的功能正在执行:

public static async Task ProcessRabbitMqTopicStatusMessage([RabbitQueueTrigger("tempq")]
     [RabbitQueueBinder("myexchange", "myroutingkey", "myerrorq",autoDelete:true,durable:true, execlusive:false)]
     TriggeredFunctionData message,
        TextWriter logger)
    {   

        if (message != null)
        {

        }


     }

此方法已成功触发,但消息始终为空。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您的用户功能不应该直接绑定到TriggeredFunctionData。这是触发基础设施使用的中间对象,它被转换为最终目标对象以匹配您的功能签名。
绑定作者(在本例中,您链接到的GitHub站点上的RabbitMQ)定义了它可以绑定的可能对象。

http://www.sarmaad.com/2016/11/azure-webjobs-and-rabbitmq/开始,以下是其使用示例:

public void IntegrateApprovedProductToMarketPlace(
[RabbitQueueBinder("product", "product.approved", "error")]
[RabbitQueueTrigger("integration-product-approved")]
ProductApproved message, TextWriter log)
{
[handle message here]
}