Shuttle ESB入门实例



Shuttle ESB入门实例

下载Shuttle ESB

从GitHub项目发布页,下载最新的发布版本。
Shuttle-ESB源码包列表http://www.nuget.org/packages?q=shuttle-esb
发布页面
https://github.com/Shuttle/shutle-esb/releases

 

使用MSMQ快速入门

因为Shuttle ESB需要队列来操作,所以我们使用微软的MSMQ来实现。在做实例前,必须先确保你电脑上安装了MSMQ。
安装MSMQ:http://msdn.microsoft.com/en-us/library/aa967729%28v=vs.110%29.aspx

 

我们来创建一个非常简单的实例。我们发送一个命令,到主机服务器,服务器接收并显示。

 

注意:确保所有项目(源代码以及你所新建的项目)在同一版本的Framework下(如都在FrameWork 4.0下),用以保证IHost类型的服务都能够正常运行。

 

VS解决方案

建立一个VS解决方案并创建一个新的空方案。
首先点击创建新项目;
在其他项目类型选择Visual Studio解决方案并单击“空白解决方案模板;
给解决方案起名为:QuickStart.Shuttle;

点击OK完成创建。

 

消息

因为我们的消息是共享的,所以创建一个单独的组件共享控制。新建一个项目,命名为:QuickStart.Shuttle.Messages.

新建一个名为WriteBlueMessageCommand 的类,并编写如下代码:

 

[csharp] view plaincopyprint?

  1. namespace QuickStart.Shuttle.Messages
  2. {
  3.     public class WriteBlueMessageCommand
  4.     {
  5.         public string BlueMessage { get; set; }
  6.     }
  7. }

 

客户端

新建一个控制台应用程序,命名为:QuickStart.Shuttle.Client ,并添加引用:
QuickStart.Shuttle.Messages(项目引用)
Shuttle-esb-msmq(可以下载源代码)

在控制台应用实现中添加如下代码:

 

[csharp] view plaincopyprint?

  1. using System;
  2. using QuickStart.Shuttle.Messages;
  3. using Shuttle.Core.Infrastructure;
  4. using Shuttle.ESB.Core;
  5. namespace QuickStart.Shuttle.Client
  6. {
  7.     internal class Program
  8.     {
  9.         private static void Main(string[] args)
  10.         {
  11.             var bus = ServiceBus.Create().Start();
  12. ColoredConsole.WriteLine(
  13.                 ConsoleColor.DarkGray,
  14.                 ”(to exit press enter on an empty line):”);
  15.             ColoredConsole.WriteLine(
  16.                 ConsoleColor.DarkGray,
  17.                 ”Enter a message to write in blue on the server and press enter:”);
  18.             Console.WriteLine();
  19. var message = Console.ReadLine();
  20. while (!string.IsNullOrEmpty(message))
  21.             {
  22.                 bus.Send(new WriteBlueMessageCommand
  23.                             {
  24.                                 BlueMessage = message
  25.                             });
  26. message = Console.ReadLine();
  27.             }
  28. bus.Dispose();
  29.         }
  30.     }
  31. }

 

Shuttle ESB需要知道消息往哪发。由于我们使用的是默认的消息路由的供应商,我们需要在应用程序配置文件中定义的路径。在项目配置中添加一条路径:


 

[csharp] view plaincopyprint?

  1. <?xml version=”1.0″?>
  2. <configuration>
  3.     <configSections>
  4.         <section name=”serviceBus” type=”Shuttle.ESB.Core.ServiceBusSection, Shuttle.ESB.Core”/>
  5.     </configSections>
  6. <serviceBus>
  7.         <messageRoutes>
  8.             <messageRoute uri=”msmq://./quickstart_server_inbox_work”>
  9.                 <add specification=”StartsWith” value=”QuickStart”/>
  10.             </messageRoute>
  11.         </messageRoutes>
  12.     </serviceBus>
  13. </configuration>

 

它的作用就是,告诉Shuttle ESB发送所有的消息。起点是QuickStart,终点是 msmq://./quickstartserverinbox_work

 

服务端

新建一个项目QuickStart.Shuttle.Server ,并添加如下引用:
QuickStart.Shuttle.Messages(项目引用)
Shuttle-esb-msmq(源代码文件)

新建一个类,名为ServiceBusHost,因为我们将使用通用的主机托管服务器,所以我们需要一个通用的主入口点。它通过实现IHost接口,去找到所需执行的类。所以我们的ServiceBusHost类需要实现IHost接口。

 

[csharp] view plaincopyprint?

  1. using System;
  2. using Shuttle.Core.Host;
  3. using Shuttle.ESB.Core;
  4. namespace QuickStart.Shuttle.Server
  5. {
  6.     public class ServiceBusHost : IHost, IDisposable
  7.     {
  8.         private static IServiceBus bus;
  9. public void Start()
  10.         {
  11.             bus = ServiceBus.Create().Start();
  12.         }
  13. public void Dispose()
  14.         {
  15.             bus.Dispose();
  16.         }
  17.     }
  18. }

 

我们的服务总线实例,需要处理一个输入队列,我们在配置文件中进行配置:

 

[csharp] view plaincopyprint?

  1. <?xml version=”1.0″?>
  2. <configuration>
  3.     <configSections>
  4.         <section name=”serviceBus” type=”Shuttle.ESB.Core.ServiceBusSection, Shuttle.ESB.Core”/>
  5.     </configSections>
  6. <serviceBus>
  7.         <inbox
  8.             workQueueUri=”msmq://./quickstart_server_inbox_work”
  9.             errorQueueUri=”msmq://./quickstart_server_inbox_error”/>
  10.     </serviceBus>
  11. </configuration>

 

为了终端能够高效的启动,我们需要进行一些配置。建立你的服务器项目的本地引用的程序集复制。打开项目属性,然后点开 调试 选项卡,在启动类型中,选择 启动外部程序。 然后选择本项目的bin目录下的Shuttle.Core.Host.exe 作为启动项目(因为引用了,所以会出现在这里。似乎是废话~~)
对于Shuttle ESB的消息接受机制,我们要为每一个消息类型创建一个处理程序(Handler)。我们来为WriteBlueMessageCommand 消息创建一个Handler。新建一个名为WriteBlueMessageHandler 的类,并继承IMessageHandler 接口。

 

[csharp] view plaincopyprint?

  1. using System;
  2. using QuickStart.Shuttle.Messages;
  3. using Shuttle.Core.Infrastructure;
  4. using Shuttle.ESB.Core;
  5. namespace QuickStart.Shuttle.Server
  6. {
  7.     public class WriteBlueMessageHandler : IMessageHandler<WriteBlueMessageCommand>
  8.     {
  9.         public void ProcessMessage(HandlerContext<WriteBlueMessageCommand> context)
  10.         {
  11.             ColoredConsole.WriteLine(ConsoleColor.Blue, context.Message.BlueMessage);
  12.         }
  13. public bool IsReusable
  14.         {
  15.             get { return true; }
  16.         }
  17.     }
  18. }

 

运行解决方案

为了能够正常运行解决方案,需要做如下配置:右击解决方案,选择启动项目选项卡,然后选择多启动项目之后,选择Client和Server。

然后,你就可以运行并测试了。

你已经创建了一个基于ESB的一个非常简单的实例,但是这个例子是比较简陋的。从这里你可以了解样品并与社区参与扩大你的范围。

 

实例下载http://download.csdn.net/detail/liu765023051/7754559

原文地址http://shuttle.github.io/shuttle-esb/getting-started/index.html

http://blog.csdn.net/liu765023051/article/details/38525351