博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shuttle ESB实现消息推送
阅读量:3979 次
发布时间:2019-05-24

本文共 3495 字,大约阅读时间需要 11 分钟。

      ESB全称Enterprise Service Bus,即企业服务总线。它是传统中间件技术与XML、Web服务等技术结合的产物。

 ESB的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。

  看吧,ESB的功能是如此强大。在java中常用的是Mule ESB,而到了.Net,Shuttle ESB作为一种新生的ESB正在慢慢的被人们所接受。下面通过一个实例讲解Shuttle ESB的创建过程及推送原理。

  1.我们需要引入Shuttle ESB相关的类库-Shuttle.Core.Data、Shuttle.Core.Domain、Shuttle.Core.Host、Shuttle.Core.Infranstructure、Shuttle.ESB.Core、Shuttle.ESB.Msmq、Shuttle.ESB.SqlServer,为了保证版本统一,我们可以在VS中安装NuGet插件下载Shuttle ESB需要的类库;

  2.在Pub端添加Shuttle ESB配置文件app.config,Shuttle ESB通过配置文件读取数据库内容,获得需要推送数据的Sub端工作队列Uri及Sub端可以接受的消息类型,配置内容如下:

        
3.在Pub端启一个Bus,用于推送数据:
//连接数据库            new ConnectionStringService().Approve();            //配置信息            subscriptionManager = SubscriptionManager.Default();            //创建 消息通道            bus = ServiceBus                .Create(c => c.SubscriptionManager(subscriptionManager))                .Start();            Console.WriteLine();            ColoredConsole.WriteLine(ConsoleColor.Green, "Server bus started.  Press CTRL+C to stop.");
         
Bus创建完毕后,通过bus.Publish方法完成向Sub端的消息推送;

  4.在Sub端添加Shuttle ESB配置文件app.config,Shuttle ESB通过配置文件向数据库写入当前Sub端可以接收的消息类型及当前工作队列的Uri。Pub端通过Sub端写入到数据库的消息类型和工作队列Uri判断是否向某一Sub端发送某种类型的数据,Sub端的配置文件如下:

 
  5.在Sub端启一个Bus用于接收Pub端推送的数据;
//连接数据库            new ConnectionStringService().Approve();            //配置信息            subscriptionManager = SubscriptionManager.Default();            /*              * 配置接收消息的类型:              *   风报警解除、雨报警解除、雪报警解除、异物报警解除、地震报警解除              *                 * 远程实验三个实体              */            subscriptionManager.Subscribe(                new[] {                     typeof(WindInfoAlarmEntity).FullName,                     typeof(RainInfoAlarmEntity).FullName,                     typeof(SnowInfoAlarmEntity).FullName,                    typeof(FreignMatterAlarmEntity).FullName,                    typeof(EarthquakeAlarmEntity).FullName,                    typeof(String).FullName                }            );            //创建 消息通道            bus = ServiceBus                     .Create(c => c.SubscriptionManager(subscriptionManager))                     .Start();            Console.WriteLine();            ColoredConsole.WriteLine(ConsoleColor.Green, "Server bus started.  Press CTRL+C to stop.");
        
在Bus中说明,当前Sub端可以处理的数据类型,比如WindInfoAlarmEntity类型、String类型。

  6.在Sub端建立对应的handler,通过泛型限制接收不同类型的数据推送。处理String类型的handler如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Shuttle.ESB.Core;using Shuttle.Core.Infrastructure;using ICT.MainFramework.ViewEntity;using ICT.RCS.Server.ESB;namespace PublishSubscribe.Subscriber1{    public class WindRainSnowStrHandler : IMessageHandler
{ public void ProcessMessage(HandlerContext
context) { string strType = context.Message.Split('#')[0].ToString(); //ESB接收处理消息 MessageTransfer.transferDataToEntity(MainServerForm.bus, context.Message); } public bool IsReusable { get { return true; } } }}
         
为了解决离线数据推送,Shuttle ESB用MSMQ作为消息队列,将待处理的消息缓存到MSMQ中。
  到此Shuttle ESB的Pub端和Sub端创建完毕,运行效果为Pub端通过bus发布一个消息后,局域网内已经在数据库的工作队列Uri中注册过,且符合相应消息类型的Sub端均可以接收到Pub端发布的消息,观察者模式的完美运用。

  Shuttle ESB的原理明白了,Mule ESB、JBoss ESB也就一看就懂。

  希望我的讲解能帮助大家进一步认识Shuttle ESB。  

转载地址:http://sxkui.baihongyu.com/

你可能感兴趣的文章
Ubuntu的sudo与su命令使用与开启root帐户
查看>>
安装Ubuntu nfs配置系统
查看>>
ubuntu 下minicom的安装及使用
查看>>
专注于开源技术的研究与应用 Ubuntu下配置samba实现文件夹共享
查看>>
windows能够访问LINUX samba用户,securecrt却不能登陆
查看>>
extern "C"的用法解析
查看>>
ubuntu 中乱码问题
查看>>
使用SecureCRT登录Ubuntu中文乱码问题
查看>>
V4L2驱动的移植与应用
查看>>
Busybox下tftp命令使用详解
查看>>
流媒体相关知识介绍 及其 RTP 应用
查看>>
用CMake写一个简单的交叉编译测试工程
查看>>
JRTP库与JTHREAD库的编译与移植
查看>>
RTMP协议详解(转)
查看>>
如何推送h.264视频直播流到rtmp server
查看>>
svn代码回滚命令
查看>>
NFS挂载的问题svc: failed to register lockdv1 RPC service
查看>>
Ffmpeg快速命令使用
查看>>
ffmpeg的编译大全
查看>>
几个动态链接库相关的命令
查看>>