2017-08-15 23 views
0

webjob SDK(https://github.com/Sarmaad/WebJobs.Extensions.RabbitMQ)にrabbitMQ拡張機能を使用して、何かがキューに置かれたときにトリガさせようとしています。WebJob SDKファンクションに入るときにTriggeredFunctionData nullが返される

トリガーは正常に機能しますが、コンテンツは自分の機能に渡されません。

拡張機能のソースをダウンロードしてその中でデバッグできるようになりました。キューの内容が正常に配信され、拡張機能が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) 
     { 

     } 


    } 

このメソッドが正常にトリガされますが、メッセージは常にnullです:

私の関数が実行されています。

提案がありますか?

答えて

0

ユーザー機能は、はTriggeredFunctionDataに直接バインドしないでください。これは、トリガーインフラストラクチャによって使用される中間オブジェクトで、関数のシグネチャに一致するように最終的な宛先オブジェクトに変換されます。
バインディングの作成者(この場合はリンク先のGitHubサイトのRabbitMQ)は、バインド可能なオブジェクトを定義するものです。

public void IntegrateApprovedProductToMarketPlace(
[RabbitQueueBinder("product", "product.approved", "error")] 
[RabbitQueueTrigger("integration-product-approved")] 
ProductApproved message, TextWriter log) 
{ 
[handle message here] 
} 
http://www.sarmaad.com/2016/11/azure-webjobs-and-rabbitmq/から

は、ここではそれらの使用法の例でした

関連する問題