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

How edit EvenData message in Receiver Event Hub?

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

 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;
            }

我试过循环。例如

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

同样无效。

I would after receiving customer data in the message, then download it to the weather, and replace the message of the weather, which continue to be sent to the stream analytics.

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

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

虽然你有一些选择:

  1. Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages) 中,像您现在一样循环所有消息,并将它们发送到另一个事件中心,然后该中心又连接到流分析作业。
  2. 像现在一样使用 Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages) 循环所有消息,获取天气数据并将其存储到 Azure Blob 存储。

如果您探索选项 2,您可以将 blob 容器作为输入连接到流分析作业。