2016-10-17 1 views
0

Ich möchte eventhub Kunden senden und dann herunterladen, um Beispieldaten wie Wetter und senden Sie einen anderen eventhub. Mein Code funktioniert nicht richtig. Es gibt keinen Fehler, aber die Daten werden nicht an die Datenbank gesendet.Wie kann ich eine Nachricht von eventhub an einen anderen eventhub senden?

public Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages) 
     { 
       try 
      { 
       foreach (EventData message in messages) 
       { 
         string data = Encoding.UTF8.GetString(message.GetBytes()); 
         NewClient Client = JsonConvert.DeserializeObject<NewClient>(data); 
        if (Client.City != null && Client.Street != null) 
        { 

         GoogleGeoApi GeoClient = new GoogleGeoApi(); 
         GeoClient.SetCoordinates(Client.City, Client.Street); 
         WeatherApi WeatherApiobject = new WeatherApi(); 
         WeatherApiobject.GetJson(GeoClient.convertlat, GeoClient.convertlng); 
         string weatherdata = WeatherApiobject.sendEvent; 
         SenderEvent NewSenderEvent = new SenderEvent(); 
         NewSenderEvent.DataSender(weatherdata, ConstFile.WeatherEventHubName); 
         //StartH(ConstFile.WeatherEventHubName).Wait(); 
        } 

        Interlocked.Increment(ref this.totalMessages); 
        this.LastMessageOffset = message.Offset; 
       } 

       if (this.IsClosed) 
       { 
        this.IsReceivedMessageAfterClose = true; 
       } 

       if (this.checkpointStopWatch.Elapsed > TimeSpan.FromMinutes(1)) 
       { 
        lock (this) 
        { 
         this.checkpointStopWatch.Reset(); 
         return context.CheckpointAsync(); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("{0} > Event Hub Exception: {1}", DateTime.Now, ex.Message); 
      } 

      return Task.FromResult<object>(null); 
     } 

ich will hinzufügen, dass mein Empfänger eventhub wie folgt aussieht: https://code.msdn.microsoft.com/Service-Bus-Event-Hub-45f43fc3/view/SourceCode#content

+0

Was ist diese Klasse 'SenderEvent', ist diese Klasse verantwortlich für das Senden der Daten an einen anderen' EventHub'? Wenn ja, poste diesen Code bitte. –

+0

Den folgenden Code einfügen. SenderEvent ist für beide Nachrichten (Client und Wetterdaten) gleich. – Kamil

+0

Und erreicht die App die Zeile 'eventhubclient.Send (data1);' des eingefügten Codes ohne Ausnahmen? Und welcher Prozess hört den zweiten Event-Hub? –

Antwort

0
public class SenderEvent 
    { 
     public void DataSender(string data, string eventhubname) 
     { 
      var eventhubclient = EventHubClient.CreateFromConnectionString(ConstFile.eventHubConnectionString, eventhubname);  
      EventData data1 = new EventData(Encoding.UTF8.GetBytes(data)); 
      eventhubclient.Send(data1); 
     } 
0

Sie Stream-Analytics dies sehr leicht zu tun verwenden können! Ihr erster Event Hub ist ein input in Stream Analytics. Dann kannst du eine query gegen den Stream schreiben (Wähle * aus [Input1] ... das bekommt dir alles). Sie können output den Stream zurück zu einem anderen Event Hub.

0
private static async Task StartHost(string eventHubName) 
     { 
      string eventProcessorHostName = "1"; 
      string storageConnectionString = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", ConstFile.storageAccountName, ConstFile.storageAccountKey); 
      host = new EventProcessorHost(
       eventProcessorHostName, 
       eventHubName, 
       ConstFile.ConsumerGroup, 
       ConstFile.eventHubConnectionString, 
       storageConnectionString, eventHubName.ToLowerInvariant()); 

      factory = new DemoEventProcessorFactory(eventProcessorHostName); 

      try 
      { 
       var options = new EventProcessorOptions(); 
       options.ExceptionReceived += (sender, e) => { Console.WriteLine(e.Exception); }; 
       await host.RegisterEventProcessorFactoryAsync(factory); 
      } 
      catch (Exception exception) 
      { 
       Console.ForegroundColor = ConsoleColor.Red; 
       Console.WriteLine("{0} > Exception: {1}", DateTime.Now.ToString(), exception.Message); 
       Console.ResetColor(); 
      } 
     } 
    } 
} 
Verwandte Themen