【发布时间】:2012-02-10 01:52:04
【问题描述】:
我正在从我们的 ASP.NET 站点中删除我们的电子邮件系统,该站点用于立即使用系统发送电子邮件,以在单独的服务中处理请求以减少网站上的工作量。我正在尝试围绕一组接口设计它,以便我可以根据需要交换实现,但最初它将基于消息队列(MSMQ)将请求发送到队列,让服务接收传入请求然后处理它们。我目前大致定义了以下接口:
// Sends one or more requests to be processed somehow
public interface IRequestSender
{
void Send(IEnumerable<Request> requests);
}
// Listens for incoming requests and passes them to an observer to do the real work
public interface IRequestListener : IObservable<Request>
{
void Start();
void Stop();
}
// Processes a request given to it by a IRequestListener
public interface IRequestProcessor : IObserver<Request>
{
}
您会注意到 Listener 和 Processor 使用 observable 模式,因为我认为这似乎最合适。
我的问题是弄清楚如何编写从 MSMQ 接收的IRequestListener 的实现,基本上我如何创建合适的IObservable<T>?
我发现的第一个选择是根据MSDN documentation 给出的示例从头开始创建IObservable<T>,但这似乎需要做很多管道工作。
另一个选择是使用响应式扩展,因为它似乎旨在使创建可观察对象变得更容易。我发现最接近将 Rx 与 MSMQ 结合使用的是这些页面:
- Using Reactive extension (Rx) for MSMQ message receive using async pattern (queue.BeginReceive,queue.EndReceive)
- MSMQ using Rx - Code snippet for MSMQ receive timeout problem
但我不确定如何将这些示例应用到我的IRequestListener 界面。
也欢迎任何其他想法,如果合适的话,甚至可以更改我的基本设计。
【问题讨论】:
标签: .net msmq system.reactive