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

时间: 2024-08-11 20:20:00

Shuttle ESB(一)——入门实例的相关文章

Shuttle ESB(四)——公布订阅模式实例介绍(1)

前面,我已经集中用了三篇文章来讲Shuttle ESB的入门实例与宏观概念. Shuttle ESB一共同拥有两种发送消息的模式:请求/对应模式与Pub/Sub模式. 关于这两种模式的区分.请看以下文章的介绍:Shuttle ESB(三)--架构模型介绍(2) 在Shuttle ESB的第一篇文章中,关于入门实例的介绍,是基于Command命令的请求响应模式.这样的模式发送的消息比較简单.是同步的. 发送消息端与接收消息端的行为耦合性比較大. 请求发送后,其它进程都会处于等待状态.等待服务端返回

Shuttle ESB(四)——发布订阅模式实例介绍(1)

前面,我已经集中用了三篇文章来讲Shuttle ESB的入门实例与宏观概念.Shuttle ESB一共有两种发送消息的模式:请求/相应模式与Pub/Sub模式. 关于这两种模式的区分,请看下面文章的介绍:Shuttle ESB(三)--架构模型介绍(2) 在Shuttle ESB的第一篇文章中,关于入门实例的介绍,是基于Command命令的请求响应模式.这种模式发送的消息比较简单,是同步的.发送消息端与接收消息端的行为耦合性比较大.请求发送后,其他进程都会处于等待状态,等待服务端返回响应信息后,

Shuttle ESB(六)——在项目中的应用

如果说你认真看了前面几篇关于ESB的介绍,我相信,在这一篇文章中,你将会找到很多共鸣. 尽管,市面上开源的ESB确实非常之多,像Java中的Mule ESB,Jboss ESB:.Net中的NServiceBus.而Shuttle ESB是一个新兴的开源框架,网络上资源也比较少.我们当初为什么会选用Shuttle ESB呢? 正所谓没有最好,只有更合适.多次调研发现,Shuttle ESB有以下几大优点:1.Shuttle ESB是基于EDA的:2.Shuttle ESB的实现以发布订阅为核心:

Shuttle ESB(六)——在工程中的应用

假设你可能浏览在前面几篇文章ESB介绍,我相信,在这篇文章中,你会发现很多共鸣. 虽然.市面上开源的ESB确实很之多.像Java中的Mule ESB.Jboss ESB:.Net中的NServiceBus.而Shuttle ESB是一个新兴的开源框架,网络上资源也比較少.我们当初为什么会选用Shuttle ESB呢? 正所谓没有最好.仅仅有更合适.多次调研发现,Shuttle ESB有下面几大长处: 1.Shuttle ESB是基于EDA的: 2.Shuttle ESB的实现以公布订阅为核心:

Shuttle ESB(四)——宣布订阅模式实例介绍(1)

前,我的重点是关注的三篇文章Shuttle ESB入境和宏观的概念范例. Shuttle ESB模式:请求/对应模式与Pub/Sub模式. 关于这两种模式的区分,请看以下文章的介绍:Shuttle ESB(三)--架构模型介绍(2) 在Shuttle ESB的第一篇文章中,关于入门实例的介绍,是基于Command命令的请求响应模式.这样的模式发送的消息比較简单,是同步的.发送消息端与接收消息端的行为耦合性比較大.请求发送后,其它进程都会处于等待状态,等待服务端返回响应信息后,client才会进行

Shuttle ESB(五)——发布订阅模式实例实现(2)

我们接上篇文章,继续来介绍Shuttle ESB的Pub/Sub模式. 上一篇文章中,我们已经用语言描述了一个用ESB实现的场景,下面给我给出具体的代码实现. 首先,我们需要了解一下Shuttle ESB各个dll的功能: Shuttle.Core.Data:轻量级框架,使用ADO.NET的工厂和接口 Shuttle.Core.Domain:提供事件调度支持 Shuttle.Core.Host:通用主机,它能在控制台应用或者windows服务中运行 Shuttle.Core.Infrastruc

Shuttle ESB(二)——架构模型介绍

该部分包含如下五部分内容,限于篇幅,本文先介绍前三个:概念.消息类型.耦合. 一.概念 二.消息类型 三.耦合 四.模式 五.消息路由 概念 本位中的所有代码,不是一个完整的例子,也不是一个vs解决方案.它向我们介绍了,在Shuttle ESB里面一些比较重要的概念.在Shuttle ESB入门实例 里面,有一个简单的实现,将这些概念融合在了一起,大家可以结合实例,理解本文的概念. Shuttle ESB的基本组成:消息.队列和服务总线 每一个服务总线实例都是相关联的,因此只有一个输入队列,注意

Shuttle ESB(三)——架构模型介绍(2)

上一篇文章中,介绍了Shuttle ESB架构模型中的三个重要部分.今天,我们继续介绍剩余的三个内容:模式和消息路由. 四.模式 Request/Response(请求/响应模式) 对基于Request/Response消息机制的内容,你可以看WiKi的一些文章:http://en.wikipedia.org/wiki/Request-response 向一个终端发送请求,执行某项功能,你可以发送一个命令消息: bus.Send(new RequestMessage()); 虽然这是一个非常简单

Shuttle ESB实现局域网消息推送

ESB全称Enterprise Service Bus,即企业服务总线.它是传统中间件技术与XML.Web服务等技术结合的产物. ESB的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合. 看吧,ESB的功能是如此强大.在java中常用的是Mule ESB,而到了.Net,Shuttle ESB作为一种新生的ESB正在慢慢的被人们所接受.下面通过一个实例讲解Shuttle ES