【发布时间】:2015-10-02 23:24:56
【问题描述】:
场景:
我向服务器队列发送请求(我正在使用 RabbintMQ 异步处理消息)。当服务器处理请求时,它会对不同的队列产生两个响应。
我想使用 RX 来订阅响应,但也可以访问它们的相应请求。
我目前所拥有的:
我使用 EventAggregator,它使用响应式扩展并为事件流公开 IObservable:
public interface IEventAggregator
{
void Publish<TEvent>(TEvent sampleEvent);
IObservable<TEvent> GetEvent<TEvent>();
}
当我发送请求时,我发布了一个事件:
eventAggregator.Publish(new RequestSent { ID = Guid.NewGuid(), ... })
//I could later subscribe to the event like this:
//eventAggregator.GetEvent<RequestSent>().Subscribe(..)
当服务器响应时,响应也会发布到 EventAggregator,所以我可以订阅它们:
eventAggregator.GetEvent<ResponseFromQueue1>().Subscribe(OnResponseFromQueue1)
eventAggregator.GetEvent<ResponseFromQueue2>().Subscribe(OnResponseFromQueue2)
我也可以订阅 RequestSent
我需要什么:
private void OnResponseFromQueue1(RequestSent request, ResponseFromQueue1 response)
{
I need access to both request and respone
}
这样会更好:
private void OnResponse(
RequestSent request,
ResponseFromQueue1 response1,
ResponseFromQueue2 response2)
{
//actually, this would simplify implementation of my logic a lot
}
可以使用 RX 吗?
【问题讨论】:
标签: c# .net system.reactive