发布订阅模式实例实现(2)

我们接上篇文章,继续来介绍Shuttle ESB的Pub/Sub模式。

上一篇文章中,我们已经用语言描述了一个用ESB实现的场景,下面给我给出具体的代码实现。

首先,我们需要了解一下Shuttle ESB各个dll的功能:

Shuttle.Core.Data:轻量级框架,使用ADO.NET的工厂和接口

Shuttle.Core.Domain:提供事件调度支持

Shuttle.Core.Host:通用主机,它能在控制台应用或者windows服务中运行

Shuttle.Core.Infrastructure:Shuttle ESB的基础服务

Shuttle.ESB.Core:Shuttle的核心实现

Shuttle.ESB.Modules:Shuttle的扩展服务

Shuttle.ESB.MSMQ:Shuttle基于微软消息队列的实现

Shuttle.ESB.SqlServer:基于SqlServer数据库的表队列

1、消息实体

创建项目PublishSubscribe.Message,,并添加OrderCompletedEvent和WorkDoneEvent两个消息事件实体(至于为什么是两个消息实体,我也已经介绍过了),使用两个消息事件实体,是为了防止死循环的出现。

a、OrderCompletedEvent事件消息实体using System;namespace PublishSubscribe.Messages{public class OrderCompletedEvent{public Guid OrderId { get; set; }public String coment { get; set; }}}b、WorkDoneEvent事件消息实体namespace PublishSubscribe.Messages{public class WorkDoneEvent{public string Comment { get; set; }}}2、消息发布端

消息发布端,主要功能是:需要启动一个ESB实例,主要负责广播消息,同时,监听消息队列,准备接收消息。

a、添加引用

创建控制台应用程序PublishSubscribe.Publish,然后使用NuGet,添加如下引用:

PublishSubscribe.Messages

Shuttle.Core.Data

Shuttle.Core.Domain

Shuttle.Core.Host

Shuttle.Core.Infrastructure

Shuttle.ESB.Core

Shuttle.ESB.Modules

Shuttle.ESB.SqlServer

b、配置文件app.config

配置文件中,主要配置了数据库连接字符串、以及Shuttle ESB的监听队列信息

<?xml version="1.0"?><configuration><configSections><section name="serviceBus" type="Shuttle.ESB.Core.ServiceBusSection, Shuttle.ESB.Core"/><section name="sqlServer" type="Shuttle.ESB.SqlServer.SqlServerSection, Shuttle.ESB.SqlServer"/></configSections><appSettings><add key="SubscriptionManagerSecured" value="false"/></appSettings> <connectionStrings><clear/><add name="SubscriptionConnection" connectionString="Uid=sa;Pwd=123456;Initial Catalog=shuttle;Data Source=172.22.51.180;Connect Timeout=900" providerName="System.Data.SqlClient"/> </connectionStrings><sqlServer subscriptionManagerConnectionStringName="SubscriptionConnection"/><serviceBus><inboxworkQueueUri="msmq://./pubsub-publish-inbox-work"deferredQueueUri="msmq://./pubsub-publish-inbox-deferred"errorQueueUri="msmq://./shuttle-pubsub-error"/></serviceBus><startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>c、控制台程序

在控制台程序Program中,主要经过如下几步,启动ESB服务总线实例:连接数据库、获取ESB的各种服务、设置ESB实例指定消息类型的监听队列、启动ESB实例、发送消息。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Shuttle.Core.Data;using Shuttle.ESB.SqlServer;using PublishSubscribe.Messages;using Shuttle.ESB.Core;using Shuttle.Core.Infrastructure;namespace PublishSubscribe.Publish{class Program{static void Main(string[] args){//连接数据库new ConnectionStringService().Approve();//获取ESB的各种服务var subscriptionManager = SubscriptionManager.Default();//设置ESB实例监听队列类型subscriptionManager.Subscribe(new[]{typeof(WorkDoneEvent).FullName});//启动ESB实例var bus = ServiceBus.Create(c=>c.SubscriptionManager(subscriptionManager)).Start();ColoredConsole.WriteLine(ConsoleColor.Green, "Server bus started. Press CTRL+C to stop.");while (true) {//控制台输入一个值string s = Console.ReadLine();//发送消息var message = new OrderCompletedEvent{coment = s};bus.Publish(message);Console.WriteLine("Published coment= {0}", message.coment);}}}}d、一般处理程序

添加类:WorkDoneEventHandler。

不求与人相比,但求超越自己,要哭就哭出激动的泪水,要笑就笑出成长的性格。

发布订阅模式实例实现(2)

相关文章:

你感兴趣的文章:

标签云: