如何在Receiver Event Hub中编辑EvenData消息?

时间:2016-10-06 21:24:22

标签: c# azure azure-eventhub

我是初学者,我遇到了问题。我无法替换接收器事件中心中的单个消息。有谁知道如何解决这个问题?

 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);
                    GPSApi Gpsobject = new GPSApi();
                    Gpsobject.GetJson(Client.City, Client.Street);
                    Gpsobject.DeserializeJson();
                    Gpsobject.ConvertJson();
                    WeatherApi WeatherApiobject = new WeatherApi();
                    WeatherApiobject.GetJson(Gpsobject.convertlat, Gpsobject.convertlng);
                    data = WeatherApiobject.sendEvent;
                    EventData data1 = new EventData(Encoding.UTF8.GetBytes(data));
                    //message = data1;
                // LUB TUTAJ                    
                Interlocked.Increment(ref this.totalMessages);
                this.LastMessageOffset = data1.Offset;
            }

我试过循环。 e.g。

(int i=0; i<messages.Count(); i++)

也行不通。

1 个答案:

答案 0 :(得分:0)

  

我会在收到消息中的客户数据后,将其下载到天气,并替换天气信息,然后继续发送到流分析。

我不认为这是可能的。您正在使用EventProcessor处理邮件。这是事件流的结束。从这里你可以对数据做些什么,比如持久化或者其他什么,但是你不能改变/覆盖事件,然后以某种方式神奇地将它们放回到同一个事件中心流中。

实施几乎是不可能的,因为当多个消费者使用不同的消费者群体阅读流时,您如何处理?如果这些消费者处于流中的其他位置该怎么办?

你有一些选择:

  1. Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)循环中,像您现在所做的所有消息一样,将它们发送到另一个事件中心,然后该中心又连接到流分析作业。
  2. 使用Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)循环所有消息,像现在一样,获取天气数据并将其存储到Azure Blob存储。
  3. 如果你去探索选项2,你可以将blob容器作为输入连接到Stream Analytics Job。