我想使用Rx .net扩展来处理来自Azure事件中心的事件。
如何根据从EventProcessorHost获得的消息创建可观察流?
我没有找到这种情况的参考,我在这里遗漏了一些基本的东西吗?我试图做一些没有意义的事情吗?
答案 0 :(得分:1)
是否有意义取决于你。为什么需要/想要使用Reactive Extensions?大多数情况都涉及使用Azure Stream Analytics近乎实时地转换和查询数据。
但是可以使用EventProcessor来处理数据,这是一个非常粗略的草图,可以帮助您入门:
public class EventProcessor : IEventProcessor
{
private readonly EventStreamProcessor eventStreamProcessor;
public EventProcessor(EventStreamProcessor eventStreamProcessor)
{
this.eventStreamProcessor = eventStreamProcessor;
}
public Task OpenAsync(PartitionContext context)
{
return Task.CompletedTask;
}
public Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> eventDatas)
{
foreach(var eventData in eventDatas)
eventStreamProcessor.Post(eventData);
return Task.CompletedTask;
}
public Task CloseAsync(PartitionContext context, CloseReason reason)
{
return Task.CompletedTask;
}
}
public sealed class EventStreamProcessor : IDisposable
{
private Subject<EventData> dataStream = new Subject<EventData>();
private readonly IDisposable subscription;
public EventStreamProcessor()
{
subscription = dataStream
.Synchronize()
.AsObservable()
.Subscribe((evenData) => {
// Do something
})
}
public void Dispose()
{
dataStream.OnCompleted();
subscription.Dispose();
}
public void Post(EventData eventData)
{
dataStream.OnNext(eventData);
}
}
需要考虑的几件事情:
await context.CheckpointAsync();
,但您还不知道RX管道是否已经处理了数据。IEventProcessorFactory
接口的实现我认为这个Q & A的答案也适合你。
答案 1 :(得分:0)
事件中心的实现是Akka.NET反应流Azure EventHub adapter的来源。