首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用服务总线体系结构在不同的系统之间关联/映射实体的一些方法是什么?

使用服务总线体系结构在不同的系统之间关联/映射实体的一些方法是什么?
EN

Stack Overflow用户
提问于 2013-01-24 10:49:11
回答 2查看 592关注 0票数 2

我正在研究在我们的企业中使用服务总线体系结构来协调我们环境中系统之间的数据和业务流程。

我们的情况很典型:面向客户的web应用程序将消息传递到内部系统,以进行计费、库存等。我们有几个业务实体,这些实体在大多数或所有这些系统中都是通用的;每个系统都在自己的数据库中维护这些实体的自己版本。

应用于服务总线概念,我们可以从我们的客户web门户向总线发布一条表示订单的消息。此消息可由每个感兴趣的系统使用(计费、库存等)在他们自己的数据库中创建相应的客户记录。但是,当这些内部系统之一需要发布有关订单状态的消息时,它将从自己的数据库中携带订单ID。如果我们的web门户需要使用该消息,它将不知道如何将从内部系统发送到它的订单ID与保存到web门户数据库的订单ID相关联。

由于没有其他系统本质上知道如何跨系统关联等价实体,因此似乎需要建立某种类型的映射机制,以允许系统将消息中包含的ID转换为与其相关的ID。例如,可以创建一个将ID从一个系统映射到另一个系统的数据库表。可以查询此表以检索目标系统的适当ID。我们的业务目前没有利用实体聚合或其他‘360视图’类型的存储库作为通用实体信息的单一权威来源,通用ID可以在所有系统之间传递和使用。

使用这种实体映射方法伴随服务总线实现是一种有效的方法吗?如果是这样的话,是否有任何既定的指导原则来指导设计?如果不是,我很有兴趣听到关于跨系统链接实体以促进通过服务总线进行集成的替代方法。

PS:如果有帮助,我目前正在评估构建我们的总线的MassTransit框架,所以如果有特定的信息可以提供,那也是非常受欢迎的。

EN

回答 2

Stack Overflow用户

发布于 2013-01-24 20:33:01

如果没有更多的细节,我会考虑一种类似于下面这样的方法。

  1. 网站发布SubmitNewOrder SubmitNewOrder服务将获取该

消息并将其转换为每个系统的任务;通过该转换,您可以执行ID translations

  1. Each system具有一个端点,该端点将使用正确的消息/命令并相应地执行操作

因此,这里的一些事情是,不是发送实体,而是发送命令。现在,您可以发送实体的子集(这是从实体中提取接口并编写消息类型的好时机)。从高层次上看,这似乎是解决这个问题的完全有效的方法。

如果您想更深入地了解这一点,Enterprise Service Bus: Theory in Practice是一本很棒的入门书籍。它与MassTransit没有任何关系,但许多理论都适用并奠定了很好的基础。

票数 1
EN

Stack Overflow用户

发布于 2013-01-24 13:38:09

在我现在的公司里,我做过很多类似的工作。我来自C#背景,对服务总线的概念还很陌生。我一直在做的项目主要是Java,所以我们最终选择了Mule ESB作为我们的解决方案。我强烈推荐它,但我意识到它可能不会像.NET代码那样开箱即用。

我们目前有两种类型的实体。存在于一个权威系统中并被复制到其他系统的实体,以及跨系统共享的实体。

当一个实体来自一个系统时,我发现最好是跨系统创建该实体的副本。服务总线将提取数据,对其进行转换,然后将其加载到适当的系统。这对我们来说真的很有效。

我们允许部分更改(一个系统修改5个属性/字段,另一个系统管理另外3个属性/字段),到目前为止工作正常。(例如,“为什么这个实体看起来很奇怪?哦,是的,某个系统修改了状态字段,我忘了它可以这样做。”)

使用队列的

我们使用ActiveMQ和主题的概念将数据从一个系统发送到另一个系统。主题类似于队列,但许多订阅者可以监听主题。例如,我们有一个生成文章实体的内部CMS。当用户发布一篇文章时,它会转到ActiveMQ主题。

具有映射数据库

令我感到羞愧的是,我最近通过将值硬编码到脚本中来做到这一点。实际上,我写了一个工具来为我生成代码,但它仍然在脚本文件中。原因是我们进行了大量的批处理,将大量消息发送到服务总线上。我不想为每次消息都要通过的数据库查找而付出代价。

所以我的工具会生成一个脚本来管理实体的映射/协调,而且速度非常快。如果进行了更改,我只需重新运行该工具,一个新脚本就可以运行了。对我来说,映射信息的变化非常非常慢,所以没问题。

但是,如果您可以创建一个具有实体映射的数据存储(XML、数据库、平面文件等),我认为这是很好的。

常规建议

做大量服务总线工作的一些技巧:

例如,我们有MySQL,SQL Server,ActiveMQ,Mongo,CouchDb,Elastic Search等。

  • 我不知道公共交通是如何工作的,但Mule有流的概念。流是从点A到点B的一个概念性数据流。您可以有许多流。这使得测试变得相当容易。由于它是集成工作,所以它不容易调试,所以我更喜欢去掉任何复杂性。

  • 尝试在源代码中使实体尽可能接近它们的目标。换句话说,如果我从SQL服务获取数据并将其写入SQL服务,那么我希望对象在完成转换的过程中90%都被放到服务总线上。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14493110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档