← NServiceBus-.Net平台下开源的服务总线(open-source service for .net)
具体的Pub/Sub 范例程序,可以到 http://www.nservicebus.com/Downloads.aspx 下载,项目所在路径:\Community.NServiceBus.2.5.0.1446\.net 4.0\samples\PubSub
首先,以admin的权限,在dos命令窗口下,运行RunMeFirst.bat 文件,检查MSMQ 是否安装和配置;配置DTC服务和安装一些性能计数器。
第二步,打开 Publish/Subscribe 项目
在Visual Studio 打开PubSub.sln 项目文件。
MyMessages项目包含了消息的定义,打开Messages.cs文件,可看到EventMessage类和IEvent 接口。需要说明的是 – NserviceBus中的所有消息避免最终基础IMessage接口。
MyPublisher 项目将发布消息,在console窗口,每按一次Enter 回车键将发送一次消息。
Subscribe1 项目 – 订阅EventMessage消息,Subscribe2 订阅IEvent 接口。因为 EventMessage实现了IEvent 接口,在MyPublisher 发送 EventMessage 消息时,两个订阅者都将收到这个消息。
第三步,运行范例程序
按 F5 运行三个Console 应用程序。通过窗口的标题识别 MyPublisher 应用程序。
在MyPublisher 窗口重复按 Enter 回车键,可观察到消息在另外的Console窗口出现 – 第一次仅仅在其中一个console 窗口,接下来的消息将出现在两个订阅窗口。
成功啦 ~~~
恭喜你 – 你已经成功完成了消息的发布/订阅演示。
容错消息Fault-tolerant Messaging
选择一个订阅者(如Subscriber1),关闭该订阅应用程序。
回到 MyPublisher 应用程序,按Enter 回车键发送消息。
再次回到Visual Studio,右击关闭的订阅者应用程序(如Subscriber1),再次启动(Debug / Start new instance),如下所示。
可注意到Subscriber1 订阅者将处理之前 MyPublisher 发送的消息。这样可以在订阅者应用程序或电脑重启时,NServiceBus 将确保消息不会丢失。
持久化订阅者-Durable Subscriptions
重启 MyPublisher 应用程序,并多次按 Enter 回车键发送消息。
注意到订阅者并没有接收到这些消息,这不符合我们的预期。我们希望发布方应用程序即使在重启的情况下,也能记住订阅者。这需要发布方应用程序存储每一个订阅者订阅的消息或事件类型。
幸运的是,除了默认可存储在内存空间外,NServiceBus 提供了两种可持久化的存储选择,分别为MSMQ 和 数据库。
MSMQ 适用于集成环境,可测试不同类型的容错情况,不必考虑可扩展性。如需要扩展发布方应用程序在多台机器上,MSMQ 订阅存储则不支持,我们需要使用数据库类型的订阅方存储。
从in-memory 存储切换到其他存储类型,可通过profile设置。下面将publisher的profile设置为集成存储(integration environment)。
在Visual studio 集成环境下,停止调试stop debugging,设置MyPublisher项目的Start options选项,如下所示。在Command line arguments 文本框输入NServiceBus.Integration。
现在按 F5 按钮,在Publisher的Console窗口按 Enter 回车键,可在Subscribers窗口看到消息。接着重启 Publisher应用程序,再次在Publisher的Console 窗口输入Enter回车键,这次Subscribers订阅者的Console窗口仍然可以接收消息。
原文链接: