Shuttle ESB——入门实例
Posted zsychanpin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
我们来创建一个很easy的实例。
我们发送一个命令。到主机server,server接收并显示。
注意:确保全部项目(源码以及你所新建的项目)在同一版本号的Framework下(如都在FrameWork 4.0下),用以保证IHost类型的服务都可以正常执行。
VS解决方式
建立一个VS解决方式并创建一个新的空方案。
首先点击创建新项目;
在其它项目类型选择Visual Studio解决方式并单击“空白解决方式模板;
给解决方式起名为:QuickStart.Shuttle。
点击OK完毕创建。
消息
由于我们的消息是共享的,所以创建一个单独的组件共享控制。
新建一个项目。命名为:QuickStart.Shuttle.Messages.
新建一个名为WriteBlueMessageCommand 的类,并编写例如以下代码:
namespace QuickStart.Shuttle.Messages { public class WriteBlueMessageCommand { public string BlueMessage { get; set; } } }
client
新建一个控制台应用程序。命名为:QuickStart.Shuttle.Client ,并加入引用:
QuickStart.Shuttle.Messages(项目引用)
Shuttle-esb-msmq(能够下载源码)
在控制台应用实现中加入例如以下代码:
using System; using QuickStart.Shuttle.Messages; using Shuttle.Core.Infrastructure; using Shuttle.ESB.Core; namespace QuickStart.Shuttle.Client { internal class Program { private static void Main(string[] args) { var bus = ServiceBus.Create().Start(); ColoredConsole.WriteLine( ConsoleColor.DarkGray, "(to exit press enter on an empty line):"); ColoredConsole.WriteLine( ConsoleColor.DarkGray, "Enter a message to write in blue on the server and press enter:"); Console.WriteLine(); var message = Console.ReadLine(); while (!string.IsNullOrEmpty(message)) { bus.Send(new WriteBlueMessageCommand { BlueMessage = message }); message = Console.ReadLine(); } bus.Dispose(); } } }
Shuttle ESB须要知道消息往哪发。因为我们使用的是默认的消息路由的供应商,我们须要在应用程序配置文件里定义的路径。在项目配置中加入一条路径:
<?xml version="1.0"?> <configuration> <configSections> <section name="serviceBus" type="Shuttle.ESB.Core.ServiceBusSection, Shuttle.ESB.Core"/> </configSections> <serviceBus> <messageRoutes> <messageRoute uri="msmq://./quickstart_server_inbox_work"> <add specification="StartsWith" value="QuickStart"/> </messageRoute> </messageRoutes> </serviceBus> </configuration>
它的作用就是。告诉Shuttle ESB发送全部的消息。
起点是QuickStart,终点是 msmq://./quickstartserverinbox_work
服务端
新建一个项目QuickStart.Shuttle.Server ,并加入例如以下引用:
QuickStart.Shuttle.Messages(项目引用)
Shuttle-esb-msmq(源码文件)
新建一个类,名为ServiceBusHost,由于我们将使用通用的主机托管server。所以我们须要一个通用的主入口点。它通过实现IHost接口,去找到所需运行的类。所以我们的ServiceBusHost类须要实现IHost接口。
using System; using Shuttle.Core.Host; using Shuttle.ESB.Core; namespace QuickStart.Shuttle.Server { public class ServiceBusHost : IHost, IDisposable { private static IServiceBus bus; public void Start() { bus = ServiceBus.Create().Start(); } public void Dispose() { bus.Dispose(); } } }
我们的服务总线实例,须要处理一个输入队列,我们在配置文件里进行配置:
<?xml version="1.0"?> <configuration> <configSections> <section name="serviceBus" type="Shuttle.ESB.Core.ServiceBusSection, Shuttle.ESB.Core"/> </configSections> <serviceBus> <inbox workQueueUri="msmq://./quickstart_server_inbox_work" errorQueueUri="msmq://./quickstart_server_inbox_error"/> </serviceBus> </configuration>
为了终端可以高效的启动。我们须要进行一些配置。
建立你的server项目的本地引用的程序集复制。打开项目属性,然后点开 调试 选项卡,在启动类型中,选择 启动外部程序。
然后选择本项目的bin文件夹下的Shuttle.Core.Host.exe 作为启动项目(由于引用了,所以会出如今这里。似乎是废话~~)
对于Shuttle ESB的消息接受机制。我们要为每个消息类型创建一个处理程序(Handler)。我们来为WriteBlueMessageCommand 消息创建一个Handler。新建一个名为WriteBlueMessageHandler 的类。并继承IMessageHandler 接口。
using System; using QuickStart.Shuttle.Messages; using Shuttle.Core.Infrastructure; using Shuttle.ESB.Core; namespace QuickStart.Shuttle.Server { public class WriteBlueMessageHandler : IMessageHandler<WriteBlueMessageCommand> { public void ProcessMessage(HandlerContext<WriteBlueMessageCommand> context) { ColoredConsole.WriteLine(ConsoleColor.Blue, context.Message.BlueMessage); } public bool IsReusable { get { return true; } } } }
执行解决方式
为了可以正常执行解决方式,须要做例如以下配置:右击解决方式。选择启动项目选项卡。然后选择多启动项目之后。选择Client和Server。
然后。你就能够执行并測试了。
你已经创建了一个基于ESB的一个很easy的实例。可是这个样例是比較简陋的。从这里你能够了解样品并与社区參与扩大你的范围。
实例下载:http://download.csdn.net/detail/liu765023051/7754559
原文地址:http://shuttle.github.io/shuttle-esb/getting-started/index.html
以上是关于Shuttle ESB——入门实例的主要内容,如果未能解决你的问题,请参考以下文章
使用 JointCode.Shuttle 管理远程服务对象的生命期
Oracle Apex Shuttle 项目数组在提交时为空