我在我的服务器上实现了Prism事件聚合器,其中一个服务发布一个事件而另一个监听它。 我的订阅代码:
my_aggregator.GetEvent<MyEvent>().Subscribe(Handler,true);
而我将我的活动发布为:
my_aggregator.GetEvent<MyEvent>().Publish(Payload);
问题是,如果订户还活着,那么一切正常。但是,假设发布了一个事件,并且订户(是一项服务)以某种方式关闭。有没有一种方法,当订户再次活跃时,它可以响应被触发的事件。
我已经看过netmsmq绑定以及它如何在服务之间提供队列,因此即使服务器关闭也可以避免数据丢失。
我是否必须将其与当前的机制联系起来? 或者有没有其他方法可以实现? 是否有任何标准的处理机制?
修改:如果您能提供描述可以实现此目标的路径的链接/代码段,那将非常有用。
答案 0 :(得分:1)
PRISM Event Aggregator仅保证在发布者举起活动时通知(同步或异步)订阅者。它不能保证订户处理&#34;事件&#34;正常。在您的情况下,调用订阅者Handler
。所有Event Aggregator都可以/应该这样做。为了确保您的Handler
运行正常(取决于服务是否有效)并且不会错过任何Payload
,您绝对需要queue
机制之类的东西。
答案 1 :(得分:1)
您正在寻找&#34;商店并转发&#34;机制。几年前,我使用this article Ade Miller中描述的方法来完成同样的事情。但是,我对Prism已经做了几年没多少了,本文大约是2008年,所以虽然描述的方法可能仍然适用,但对于较新版本的实际实现可能并不相同棱镜...
答案 2 :(得分:0)
我在codeplex论坛上发布了这个问题,得到了Bryan Noyes的answer。它是:
我担心你在Prism pub-sub事件的设计之外干净利落。它们是为松散耦合的组件而设计的,这些组件在客户端同时存在于内存中,但您不希望在这些客户端组件之间引入耦合以供它们进行通信。对于那种情况,你所说的某种服务器端队列是正确的答案,无论它们是基于MSMQ,RabbitMQ还是Service Server for Windows Server的服务总线队列(或者这些行的许多其他选项取决于是否您希望队列在内部或在云中)。
因此,简而言之,当涉及到服务器端事件时,pubsubevents并不是一个好主意。