2017-01-31 18 views
1

WebJobからEventHubメッセージを無駄に消費しようとしています。ジョブは例外を発生させることなく構築され、実行されますが、トリガは呼び出されません。私はMicrosoft.Azure.WebJobs、Microsoft.Azure.WebJobs.Extensions、およびMicrosoft.Azure.WebJobs.ServiceBus v2.0.0.0-beta2を参照しています。ここでAzure WebJobを使用してEventHubから読み取る

は私のコードです:

のProgram.cs:

public static void Main() 
{ 
    var eventHubConfig = new EventHubConfiguration(); 
    string eventHubName = "myHub"; 

    eventHubConfig.AddReceiver(eventHubName, "Endpoint=sb://xxxx.servicebus.windows.net/;SharedAccessKeyName=xxxx;SharedAccessKey=yyyy"); 
    config.UseEventHub(eventHubConfig); 

    JobHost host = new JobHost(config); 

    if (config.IsDevelopment) 
    { 
    config.UseDevelopmentSettings(); 
    } 

    host.RunAndBlock(); 
} 

Functions.cs:私のapp.configで

public static void Trigger([EventHubTrigger("myHub")] string message) 
{ 
    _logger.Debug("Message received"); 
} 

、私は適切に設定していますAzureWebJobsDashboard、AzureWebJobsServiceBus、AzureWebJobsStorageの接続文字列。

私は、メッセージのバッチを使用することから、トリガメソッドのメソッドシグネチャ(特に、パラメータタイプをEventDataまたはbyte []に​​変更すること)まで試しました。何も動作しません。 EventDataにラップされたバイト配列としてEventHubにメッセージが送信されることに注意してください。

私には何が欠けていますか?

お返事ありがとうございます。

+0

を、持っていますあなたはAzureの関数とWebの仕事を見ましたか? –

+0

WebJobログファイルにエラーがありますか? – mathewc

+0

更新情報あなたはこの問題を解決しましたか? –

答えて

2

あなたの説明によると、私はこの問題を私の側でテストするためにAzure WebJobs SDK EventHub supportGet started with Event Hubsに従った。

public static void Trigger([EventHubTrigger("{your-EventHub-name}")] EventData message) 
{ 
    string data = Encoding.UTF8.GetString(message.GetBytes()); 
    Console.ForegroundColor = ConsoleColor.Green; 
    Console.WriteLine($"Message received. Data: '{data}'"); 
    Console.ResetColor(); 
} 

Packages.config

Program.csの

class Program 
{ 
    static string eventHubName = "{your-EventHub-name}"; 
    static string connectionString = "{RootManageSharedAccessKey-connection-string}"; 
    static void Main(string[] args) 
    { 
     JobHostConfiguration config = new JobHostConfiguration(); 
     config.Tracing.ConsoleLevel = System.Diagnostics.TraceLevel.Error; 

     var eventHubConfig = new EventHubConfiguration(); 
     eventHubConfig.AddReceiver(eventHubName, connectionString); 
     config.UseEventHub(eventHubConfig); 

     JobHost host = new JobHost(config); 
     if (config.IsDevelopment) 
     { 
      config.UseDevelopmentSettings(); 
     } 

     //Send test messages 
     Task.Run(() => { 
      SendingRandomMessages(); 
     }); 

     host.RunAndBlock(); 
    } 

    static void SendingRandomMessages() 
    { 
     var eventHubClient = EventHubClient.CreateFromConnectionString(connectionString,eventHubName); 
     while (true) 
     { 
      try 
      { 
       var message = Guid.NewGuid().ToString(); 
       Console.WriteLine("{0} > Sending message: {1}", DateTime.Now, message); 
       eventHubClient.Send(new EventData(Encoding.UTF8.GetBytes(message))); 
      } 
      catch (Exception exception) 
      { 
       Console.ForegroundColor = ConsoleColor.Red; 
       Console.WriteLine("{0} > Exception: {1}", DateTime.Now, exception.Message); 
       Console.ResetColor(); 
      } 

      Thread.Sleep(4000); 
     } 
    } 
} 

Functions.cs:そして、私はメッセージを受け取ることができ、あなたは私のコードスニペットを参照してください可能性があり

<?xml version="1.0" encoding="utf-8"?> <packages> <package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net451" /> <package id="Microsoft.Azure.ServiceBus.EventProcessorHost" version="2.2.6" targetFramework="net451" /> <package id="Microsoft.Azure.WebJobs" version="2.0.0-beta2" targetFramework="net451" /> <package id="Microsoft.Azure.WebJobs.Core" version="2.0.0-beta2" targetFramework="net451" /> <package id="Microsoft.Azure.WebJobs.ServiceBus" version="2.0.0-beta2" targetFramework="net451" /> <package id="Microsoft.Data.Edm" version="5.6.4" targetFramework="net451" /> <package id="Microsoft.Data.OData" version="5.6.4" targetFramework="net451" /> <package id="Microsoft.Data.Services.Client" version="5.6.4" targetFramework="net451" /> <package id="Microsoft.WindowsAzure.ConfigurationManager" version="1.8.0.0" targetFramework="net451" /> <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net451" /> <package id="System.Spatial" version="5.6.4" targetFramework="net451" /> <package id="WindowsAzure.ServiceBus" version="3.4.1" targetFramework="net451" /> <package id="WindowsAzure.Storage" version="7.2.1" targetFramework="net451" /> </packages> 

結果:

また、あなたは、Azureのポータルにログインし、次のようにあなたのイベントのハブの概要ブレードを確認することができます:

好奇心のうち

+0

優秀!...私のために働く素晴らしい。上記のプロセスにPartitionedレシーバーを追加しましたか?イベントハブ(EventHubReceiverTrigger ["EventHubName"])で特定のパーティションから読み込む必要がある場合はどうすればよいですか? –

+0

サービスバスのようにwebjob内の機能をトリガーするイベントを作成することはできますか? 4秒ごとにeventhubをポーリングするのではなく..?私は間違っているかもしれません.. –

+0

'SendingRandomMessages'メソッドでは、メッセージを送信した後、別の新しいメッセージを送信する前に4秒間スリープ状態になります。 –

関連する問題