什么是服务总线,我何时需要使用它?

107

我听说过NServiceBus,但我并没有真正理解它是什么。他们声称自己是“.net最受欢迎的开源服务总线”。

什么是服务总线,我什么时候需要它?


我来晚了,不会把这个作为答案发布,因为简而言之,如果你不知道为什么需要它,那么很可能是因为它解决的特定问题在连接应用程序和为您的业务提供集中API方面您并没有。 - War
9
@Wardy,我不同意你的说法。事实上,你不理解某件事或者不知道它是什么,并不意味着了解它对你没有帮助。 - Cristian Toma
这并不是为了掩盖无知而说的,而更多地是指出当你遇到它解决的问题时,“服务总线”是一个经常被提及的术语,所以你要么需要它,要么不需要它,因此从来不必担心它。 - War
我会将此作为编辑添加,但这将从根本上改变问题... NServiceBus现在被称为“Particular Service Platform”,可以在http://particular.net/找到(无论如何,NServiceBus.com现在都会重定向到该网站)。 - Dan Atkinson
如果你不知道已经存在的东西的名称或概念,那么很可能会自己编写一个。因此,了解它们是很好的,这样你就可以使用它们(如果需要的话)。 - noelicus
3个回答

83

你可以将服务总线视为面向服务架构(SOA)的以太网。

首先,它引入了一种识别事物的语言,就像以太网中的IP地址一样。这个名称并不是某种固有的物理属性。

其次,在每个节点上都涉及到一些物理设备,例如在支持半连接通信的总线中使用队列,或者在比喻中使用以太网卡。

除了物理部分外,还有通信的“协议”部分,就像以太网的OSI栈。对于总线而言,这是应用程序代码所使用的客户端库。

最终,你可以将服务总线视为构建分布式系统的下一个更高级别的抽象层。你也可以将其用于客户端-服务器通信,以提供可靠的单向消息传递,并让服务器向客户端推送通知。

具体而言,一旦你接受了其使用队列技术的方式,你会发现NServiceBus非常轻量和易于使用,它支持RabbitMQ、MSMQ、普通SQL表、Amazon SQS、Azure Storage Queues和Azure Service Bus等多种选择。


谢谢!我现在明白了大局!实际上,我问这个问题是为了在你今晚的会议上有所准备,但看起来我可能赶不上了。 - stiank81

14

查看维基百科文章,了解企业服务总线(Enterprise Service Bus)

服务总线(Service Bus)作为另一层抽象,在实现良好的面向服务的架构(Service Oriented Architecture)中扮演着重要角色。服务总线可以处理一些后台任务,例如消息传递、路由和服务协调。

如果您不确定为什么需要这样的东西,我建议您先了解什么是优秀的面向服务的架构(Service Oriented Architecture)。让我真正认识到只有拥有真正的面向服务的架构(Service Oriented Architecture),才能区分出与仅仅具备Web服务(Web Services)的区别的书籍,是Thomas Erl的《面向服务的架构:概念、技术和设计》(Service-Oriented Architecture: Concepts, Technology, and Design)


那么我可以使用它来实现桌面客户端应用程序和服务器之间的通信吗?其中服务器是内部的。 - stiank81
你可以这样做。你也可以将其用于不同服务之间的通信,不同服务版本之间的通信等(包括服务使用不同协议的情况)。 - Justin Niessner

14

这个术语是在 SOA 中引入的,它在某种程度上是EAI的继承者(作为时髦词)。

何时需要?这是一个很好的问题。它带来了很多复杂性。

一个经验法则可能是,如果它解决的问题比它引起的问题更多,那么就可以采用。

严肃地说,如果您拥有异构环境并想要将(不同技术使用的)应用程序与业务流程对齐。 然后使用BPEL(但这会引入迁移问题)进行管弦乐舞蹈编排可能会有所帮助。

编辑:维基百科上没有的是实践: ESB可以使用特殊连接器适应Corba或Java Enterprise等旧终端应用程序以实现互操作性。缺点是SOAP周围的100多个‘标准’不合作需要巨大的努力。

如果您必须在2个大型保险公司兼并后的6个月内相互连接IT系统,那么您绝对需要它。


那么,在我的桌面应用程序中,它与服务器端进行了“简单”通信,是否没有必要使用Service Bus? 它能否帮助我从服务器实现推模型? 在这种情况下,它是收益大于痛苦,还是收益小于痛苦呢? - stiank81
@stiank81 抱歉,我看到(企业)服务总线和 synapses 就激动了。我查看了你提供的 NServiceBus 链接,它们的目标是相同的,你在客户端服务器应用程序中不需要类似的东西。从概念上讲,它适用于涉及多个应用程序的业务流程。如果它能解决更多问题而不是引起问题,那么它是否适合你呢? - stacker
1
只有当某项解决方案带来的问题比它本身解决的问题更少时,我们才会采用它...... 这就是我们钟爱它的原因。 - noelicus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接