前,我的重点是关注的三篇文章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模式. 关于这两种模式的区分.请看以下文 ...

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

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

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

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

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

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

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

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

  6. Shuttle ESB

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

  7. ActiveMQ入门系列三:发布/订阅模式

    在上一篇<ActiveMQ入门系列二:入门代码实例(点对点模式)>中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub & Sub),详细介绍了点对点 ...

  8. python使用rabbitMQ介绍四(路由模式)

    一.模式介绍 路由模式,与发布-订阅模式一样,消息发送到exchange中,消费者把队列绑定到exchange上. 这种模式在exchange上添加添加了一个路由键(routing-key),生产者发 ...

  9. python使用rabbitMQ介绍三(发布订阅模式)

    一.模式介绍 在前面的例子中,消息直接发送到queue中. 现在介绍的模式,消息发送到exchange中,消费者把队列绑定到exchange上. 发布-订阅模式是把消息广播到每个消费者,每个消费者接收 ...

随机推荐

  1. 完整导出IntelliJ IDEA的快捷键

    工欲善其事,必先利其器. 常常和代码打交道的人,熟练使用IDE快捷键那是必须的,由于快捷键能够把你从各种罗嗦事中解放出来.比方,假设没有快捷键,你就须要常常性的暂停快速执行的大脑,右手凭记忆摸到鼠标, ...

  2. 深入理解Tomcat系列之一:系统架构(转)

    前言 Tomcat是Apache基金组织下的开源项目,性质是一个Web服务器.下面这种情况很普遍:在eclipse床架一个web项目并部署到Tomcat中,启动tomcat,在浏览器中输入一个类似ht ...

  3. hdu1540(线段树)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1540 题意:是一条线上的点,D x是破坏这个点,Q x是表示查询以x所在的最长的连续的点的个数,R是恢 ...

  4. Swift编程语言学习10—— 枚举属性监视器

    属性监视器 属性监视器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性监视器.甚至新的值和如今的值同样的时候也不例外. 能够为除了延迟存储属性之外的其它存储属性加入属性监视器,也能够通过重载 ...

  5. 【转向Javascript系列】深入理解Generators

    随着Javascript语言的发展,ES6规范为我们带来了许多新的内容,其中生成器Generators是一项重要的特性.利用这一特性,我们可以简化迭代器的创建,更加令人兴奋的,是Generators允 ...

  6. Difference between datacontract and messagecontract in wcf

    在WCF中有两种契约各自是DataContract和MessageContract,这篇博客来讲一下两者的差别.先看一下两者定义契约实体的方式有和不同. 1.数据契约 <span style=& ...

  7. 就这样CSDN账号被人盗了??

    和往常一样,来到公司后的第一件事情就是看看自己博客.没想到今天一看,小伙伴惊呆了. 莫名其妙地多了这个多不是神马的博文,还好几篇. 这说明CSDN账号也不怎么安全哦,以后小伙伴们要注意了.

  8. jquery再体验

    $(function(){ var obj = $("div[id^='channel_'][id$='_left']"); var val = obj.html(); var i ...

  9. Codeforces Round#310 div2

    C题:这题说的是套娃,如果做题的时候知道是套娃,那就好理解多了 规则1:套娃A可以放到套娃B里面,当且仅当套娃B没有放在其他套娃里面 规则2:套娃A放在套娃B里面,且套娃B没有放在其他套娃里面,那么可 ...

  10. uvalive 2911 Maximum(贪心)

    题目连接:2911 - Maximum 题目大意:给出m, p, a, b,然后xi满足题目中的两个公式, 要求求的 xp1 + xp2 +...+ xpm 的最大值. 解题思路:可以将x1 + x2 ...