2017-08-15 75 views
0

我试图使用一个rabbitMQ扩展到webjob SDK(https://github.com/Sarmaad/WebJobs.Extensions.RabbitMQ)来让它触发时,一些东西放在队列中。TriggeredFunctionData null当进入Webjob SDK功能

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

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

 _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包含我的消息数据:从扩展的lib

监听方法。正在执行

我的功能:

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

     if (message != null) 
     { 

     } 


    } 

这种方法被成功触发,但消息始终为空。

有什么建议吗?

回答

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] 
}