我唯一的 SOA 经验来自于使用 NServiceBus。它设计得非常好,并且有一些我非常喜欢的漂亮功能:
- 消息的处理是事务性的(并为您处理),因此它是“一次且仅一次”(而不是“至少一次”)
- 内置传奇支持
- 自动重试支持
- 发布/订阅支持(但我假设所有服务/消息总线都支持此)
所有这些东西让我只能专注于应用程序的逻辑,但我只在 .NET 中使用过它,而 Windows 几乎肯定不适合我正在从事的项目。所以我的问题是...
*nix 生态系统中存在哪些服务总线技术(包括在 Mono 上运行 NSB 的体验)以及它们如何与在 Windows 上运行的 NServiceBus 相媲美?
奖励:除了上述功能之外,哪些语言可以从总线发送/接收/处理消息?能够灵活地用 A 语言编写一项服务,用 B 语言编写另一项服务,对于该项目来说非常有利。
最佳答案
SonicESB/MQ
我可以根据 Linux 上的 SonicESB 的经验来谈谈。它基本上是 SonicMQ - 一个符合 JMS 的 MOM - 顶部有一个流程中介层;那是服务总线。
优点
- 基于行程的路由;消息包含自己的工作流程,用于访问哪些服务
- 容器内消息传递;通过在 ESB 容器内路由消息来提高性能,完全避免代理。
- Web 服务端点; ESB 服务可以通过 HTTP 端点调用,从而弥合非 Java/JMS 客户端和总线之间的差距。
- Eclipse 中的优秀开发工具,用于在 Java 中开发和调试 esb 服务和进程。
- 管理工具也不错。
缺点
- 交易不跨越服务边界(自版本 7.5 以来可能已发生变化)
- 没有消息重试机制;我们使用实用服务和消息参数操作自行推出(可能在 7.5 中已更改)
- 价格昂贵;由核心授权,因此需要付费。
客户支持
就哪些技术可以向 SonicESB 发送和接收数据而言,无论是 Java JMS,这是肯定的。 Sonic 还提供了适用于 Windows 技术的 .net/C#/VB 库,因此您可以从总线发送和接收消息。这对我们来说是一个巨大的优势,因为我们的开发团队使用 C# 内置的 RIA。
您可能想查看MuleESB ,一个开源服务总线。
希望对你有帮助
关于nservicebus - *nix 生态系统中存在哪些消息总线技术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18925061/