前面,我已经集中用了三篇文章来讲Shuttle ESB的入门实例与宏观概念。

Shuttle ESB一共同拥有两种发送消息的模式:请求/对应模式与Pub/Sub模式。

关于这两种模式的区分。请看以下文章的介绍:Shuttle ESB(三)——架构模型介绍(2)

在Shuttle ESB的第一篇文章中,关于入门实例的介绍,是基于Command命令的请求响应模式。这样的模式发送的消息比較简单。是同步的。

发送消息端与接收消息端的行为耦合性比較大。

请求发送后,其它进程都会处于等待状态。等待服务端返回响应信息后,client才会进行其它行为。

PS:Shuttle ESB的Command模式与Pub/Sub模式全然类似于Ejb中的P2P与Pub/Sub。

然而,Pub/Sub模式将消息的公布端与订阅端进行了充分的解耦。

Pub端发送消息后,不用等待消息的返回,它能够选择继续发送或者停止发送。

接收端假设想接收消息。仅仅需订阅该事件消息就可以。

我们在项目中真正使用Shuttle ESB的时候。大多数情况下,我们会使用Pub/Sub模式。以下。我们就对这样的模式进行解说。

注意:即便是基于命令的请求/对应模式,也可用公布订阅的方式实现。

眼下,Shuttle ESB仅仅支持三种队列:微软的消息队列MSMQ、SqlServer基于表的队列和Rabbit MSMQ。

Shuttle ESb的Pub/Sub模式,须要MSMQ和SqlServer基于表队列两种消息队列进行实现。

关于基于SqlServer表队列,我们大家可能会有疑义:使用SqlServer数据库,不就限定了Shuttle ESB的适用范围了吗?

大家不必有此操心。

Shuttle ESB核心组件是不基于不论什么第三方组件的。将来它肯定会支持MySql和Oracle或者别的数据库的。眼下仅仅是由于Eben没有使用过Oracle,对Oracle还不是非常熟悉。所以没有做基于Oracle的队列实现。当然他跟我提过多次。希望我为开源社区做点贡献。在GitHub上给他贡献点儿代码。但是这个实现也不是一天两天的事儿。我如今实在没时间研究。这段儿时间又比較紧迫。我得考虑生计问题啊!

得先活下来。在考虑做贡献的事儿吧。过了年再说吧。

言归正传,我们继续来介绍基于Pub/Sub模式的Demo实现。功能非常easy:

从消息公布端Pub公布一个消息事件OrderCompletedEvent,多个client(如SubA和SubB)订阅该事件OrderCompletedEvent。

那么当Pub公布消息后,SubA和SubB就行收到该消息OrderCompletedEvent。

SubA和SubB接收到消息后,依据须要进行一定的处理。

然后他们都会公布一个WorkDoneEvent事件消息。这次服务端订阅WorkDoneEvent消息。

当SubA和SubB公布WorkDoneEvent消息后。Pub端就行接收到该消息WorkDoneEvent。

PS:消息的公布端与订阅端为什么使用两个不同的消息呢?由于假设使用同一个消息的话。上面的实现,将会形成死循环。

原因就是启动的Shuttle ESB实例后,该实例会监听一个或多个给定的消息队列,假设公布端和订阅端监听听一个队列,就形成死循环了。

以下介绍一些开发实例的准备工作

1、安装微软消的息队列:MSMQ

详细安装请參见:Shuttle ESB(一):入门实例

2、创建数据库并初始化数据库表队列

在SqlServer中创建数据库:shuttle(可自己定义数据库名称)。然后执行“{root}\Shuttle.ESB\source\Shuttle.ESB.SqlServer\Scripts\SubscriptionManagerCreate.sql”脚本(在源代码中。本样例中提供该脚本),创建以及初始化SqlServer表队列。

3、安装NuGet插件

它就是一款管理第三方dll的插件。

关于NuGet的安装、使用,网上有一大堆,这里我就不具体介绍了。大家自己百度就可以。

具体实例,下篇文章继续介绍。

Shuttle ESB(四)——公布订阅模式实例介绍(1)的更多相关文章

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

    前,我的重点是关注的三篇文章Shuttle ESB入境和宏观的概念范例. Shuttle ESB模式:请求/对应模式与Pub/Sub模式. 关于这两种模式的区分,请看以下文章的介绍:Shuttle E ...

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

    上一篇文章中,介绍了Shuttle ESB架构模型中的三个重要部分. 今天,我们继续介绍剩余的三个内容:模式和消息路由. 四.模式 Request/Response(请求/响应模式) 对基于Reque ...

  3. Redis源代码分析(三十)--- pubsub公布订阅模式

    今天学习了Redis中比較高大上的名词,"公布订阅模式".公布订阅模式这个词在我最開始接触听说的时候是在JMS(Java Message Service)java消息服务中听说的. ...

  4. Shuttle ESB(一)——入门实例

    下载Shuttle ESB 从GitHub项目公布页,下载最新的公布版本号. Shuttle-ESB源代码包列表:http://www.nuget.org/packages?q=shuttle-esb ...

  5. android:Activity四种启动模式简单介绍

    Activity启动模式 能够依据实际的需求为Activity设置相应的启动模式,从而能够避免创建大量反复的Activity等问题 Activity有四种载入模式 1.standard(默认启动模式, ...

  6. RabbitMQ入门学习系列(四) 发布订阅模式

    发布订阅模式 什么时发布订阅模式 把消息发送给多个订阅者.也就是有多个消费端都完整的接收生产者的消息 换句话说 把消息广播给多个消费者 消息模型的核心 RabbitMQ不发送消息给队列,生产者也不知道 ...

  7. activeMQ公布订阅模式中中经常使用工具类

    package com.jms; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import javax.j ...

  8. Shuttle ESB

    Shuttle ESB(六)——在项目中的应用 如果说你认真看了前面几篇关于ESB的介绍,我相信,在这一篇文章中,你将会找到很多共鸣. 尽管,市面上开源的ESB确实非常之多,像Java中的Mule E ...

  9. Mina、Netty、Twisted一起学(七):公布/订阅(Publish/Subscribe)

    消息传递有非常多种方式.请求/响应(Request/Reply)是最经常使用的.在前面的博文的样例中.非常多都是採用请求/响应的方式.当server接收到消息后,会马上write回写一条消息到clie ...

随机推荐

  1. ASCII-->Ansi-->Unicode-->UTF8 关于编码 自己的总结

    各种不同的编码 无非就是效率 最大化. 我猜测编码的进化流程: ASCII(American Standard Code for Information Interchange)----满足了美国和西 ...

  2. 洛谷P1615 西游记公司 题解

    题目传送门 这道题题面写得非常好. 但好像并没有什么ruan用. 这道题貌似就是把时间差求出来,乘上猪八戒能偷的电脑数就好了.(注意long long) #include<bits/stdc++ ...

  3. 用JDK自带的监控工具jconsole来监控程序运行

    工具目录:C:\Program Files\Java\jdk1.6.0_06\bin\jconsole.exe 效果如下:监控类ThreadPoolExecutorTest 的运行 选择我们运行的程序 ...

  4. PHP 权威代码风格规范

    1.常规 尽量统一ide 比如phpstream 配置文件(Settings → Code Style → PHP → Set from... → Predefined Style → PSR1/PS ...

  5. 易普优APS(高级计划排程)演绎饭局模型(通俗的告诉您ERP计划与APS计划的区别)

    一天中午,老张突然回到家里对妻子说:“亲爱的老婆,晚上几个同事要来家里吃饭.这次我专门回家来要用最先进的ERP理念来完成咱家的请客过程了,要把这次宴会搞成一次ERP家宴.你看,我已经用CRM客户关系管 ...

  6. bzoj 1898 矩阵快速幂

    思路:因为鱼的周期为2, 3, 4, 所以以12个为周期,我们拿走12步得到的矩阵进行快速幂,余下的再进行一次矩阵乘法. #include<bits/stdc++.h> #define L ...

  7. 在linux下安装sbt

    1.到官方网站下载deb包,下载地址:https://dl.bintray.com/sbt/debian/sbt-1.0.3.deb 2.点击下载的deb包进行安装 3.安装完成后,在terminal ...

  8. ubuntu 防火墙关闭的80端口,开启方法

    #关闭防火墙 /etc/init.d/iptables stopservice iptables stop # 停止服务#查看防火墙信息/etc/init.d/iptables status #开放端 ...

  9. Socket编程(一):建立与客户端的连接并接受数据

    我们这里利用Socket在模拟一个客户端与服务器通信,其实客户端与服务端通信就像人与人打电话一样,想要给一个人打电话,我们首先必须要有手机,必须知道对方的手机号码,这里Socket就好比一部手机,而短 ...

  10. Maven入门使用(一)

    一.什么是maven 一般认为maven是项目构建工具+依赖管理工具+项目信息管理工具. maven是一个强大的构建工具,能够帮助我们自动化构建过程. 清理.编译.测试.生成报告.打包.部署都是可以通 ...