构建基于消息队列的集成

Posted

技术标签:

【中文标题】构建基于消息队列的集成【英文标题】:Architecting a message queue based integration 【发布时间】:2020-12-16 11:21:57 【问题描述】:

我们当前的旧系统是本地部署的。我们计划将我们的应用程序迁移到云端作为一个长期目标,但在此期间,我们需要将此旧系统与我们基于云的应用程序集成。

我们的目标:设计一种集成,使我们的旧系统能够与我们基于云的新应用程序进行通信。

我们的计划:我们将使用消息队列来实现我们的旧系统和云之间的松散耦合通信。

我们将在我们的旧系统上拥有一个消息代理实例,并在云上拥有另一个。我们最终将在云上创建几个不同的应用程序,所有这些应用程序都将与旧系统通信,但又与我们在云上的其他应用程序分离。

实现这一目标的最佳方法是什么?

我们:

    我们的每个云应用程序是否都“连接”到云上的单个代理并以发布/订阅的方式接收消息? 我们的每个云应用程序都有专用队列,并让我们的云应用程序直接从它们的队列中读取这些消息。

我知道我的问题有点高级,因为它与系统设计有关,但同时我希望它也足够具体。欢迎任何意见或反馈。

【问题讨论】:

最后找到方法了吗? 【参考方案1】:

我强烈建议您在做出技术基础架构决策之前退后一步,为您的架构制定战略:

    业务:确定旧应用程序和新云应用程序中的不同子域(“组件”)及其相对重要性:核心、支持、通用。因此,您将优先考虑应该从旧版迁移的内容。 团队:如果您管理多个团队(您的情况可能是传统团队还是云团队?),请确保团队与子域 (Inverse Conway Maneuver) 保持一致,从而最大限度地减少协作摩擦。 COUPLING:定义不同子域之间的关系:谁是上游,谁是下游,什么是接口契约?

然后您可以开始考虑“管道”和不同的基础架构选项,以根据您的技术要求连接您的组件:同步、异步等。然后回到异步连接情况下的原始问题:通过消息队列代理与否?

这些幻灯片更深入地解释:Visualizing sociotechnical architectures with Context Maps。

如果这种架构方法引起您的共鸣,请查看Domain-Driven Design Starter Modelling Process 了解更多详细信息。

【讨论】:

以上是关于构建基于消息队列的集成的主要内容,如果未能解决你的问题,请参考以下文章

滴滴出行基于RocketMQ构建企业级消息队列服务的实践

Kafka 连接与多个消息队列的集成

滴滴出行基于RocketMQ构建企业级消息队列服务的实践

消息队列

滴滴开源基于 RocketMQ 的分布式消息队列 DDMQ

KafkaRabbitMQRocketMQActiveMQzeroMQRedisPulsar消息队列