NBear.MQ 是 NBearFramework 中新增的分布式消息队列模块,作为NBear Framework 的新成员,NBear.MQ 秉承NBear 一贯的易于使用和零配置需要的特点,大大改善开发基于消息队列的分布式系统的效率。本文通过介绍一个基于NBear.MQ 的 Sample - TestServiceMQ,演示基于NBear.MQ 开发分布式系统的基本方法。 下载 从 SF.NET 下载NBear_v1.8.0 (包括全部框架及示例源码):sourceforge.net/projects/nbear/ 如果你只想先体验一下已编译的示例程序,您也可以从这里下TestServiceMQ_bin.zip : files.cnblogs.com/teddyma/TestServiceMQ_bin.zip (请按如下顺序执行bin 中的代码:TestRemotingServer.exe, TestServiceHost.exe, TestClientApp.exe, ServiceHost 和 Client 可以是多个,server 将自动随机分配调用service 的请求到各个service host 进行处理) 注:示例程序会使用本机的8000端口,如果本机8000端口已被占用或被禁用,请修改代码以使用其它端口代替或先启用8000端口。 解析 1、 TestRemotingServer 首先是我们的Server,对于Server,如果您使用NBear.MQ 内置的MemoryServiceMQ,则几乎不需要编码,只需要运行并发布server 实例为remoting service。 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 MemoryServiceMQ mq = new MemoryServiceMQ(); 6 mq.OnLog = new LogHandler(Console.WriteLine); 7 RemotingServiceHelper rh = 8 new RemotingServiceHelper(RemotingChannelType.TCP, "127.0.0.1", 8000, new LogHandler(Console.WriteLine)); 9 rh.PublishServiceInstance("MMQ", typeof(IServiceMQ), mq, System.Runtime.Remoting.WellKnownObjectMode.Singleton); 10 11 while (Console.ReadLine() != "q") 12 { 13 } 14 } 15 } 注意,关键是第8-9 行这里,我们调用RemotingServiceHelper 类发布MemoryServiceMQ 的实例mq 到 tcp://127.0.0.1:8000/MMQ 。 如果你不希望使用MemoryServiceMQ,而希望使用基于其它MQ 如 MSMQ 或 ActiveMQ 系统的MQ 控制,您可以自己实现IServiceMQ 接口,用来代替这里的mq。 2、 TestServiceHost Service host 顾名思义就是服务的提供者,本示例的TestServiceHost 定义了两个service, MathService 和 HelloWorldService,如下: 1 public class MathServic...