2017-08-15 60 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] 
}