如何在Google Cloud Platform中实施微服务Saga

问题描述

我正在研究在GCP的K8S托管的平台上实现微服务Saga模式的解决方案。 有2个选项:Eventulate Tram和Axon。但是,这些框架似乎不支持由云提供商(例如google-cloud-Pubsub)管理的消息代理,而我不希望将Kafka或RabbitMQ部署到K8S,因为GCP已经支持PubSub。

那么,有没有办法整合Eventulate或Axon以使用Google Cloud PubSub? 谢谢

解决方法

不确定Eventuate对此有何看法,但Axon可以将扩展作为Axon Server以外的消息代理使用。在Axon的整个生命周期(阅读:最近10年)中,已经提供了其中一些,但是目前没有一种用于Axon Framework定义的所有类型的消息。因此,例如,您将无法使用Kafka在Axon中发送命令。

有理由吗?命令,事件和查询具有不同的路由要求,应该通过使用正确的工具来反映该要求。

为了在Axon方面更具体一些,可以使用以下扩展名分发您的消息:

您可以说,当前没有发布/订阅扩展名可用于分发消息。最重要的是,我的直觉会告诉我如果可用,那么由于Pub / Sub打算成为消息代理时,它可能仅用于事件消息。>

幸运的是,这实际上使您自己创建这样的扩展变得相当简单。仔细研究所有细节以构建它会有些许困难,因此,我建议在实现此目标时首先看看Axon的AMQP扩展。提示是要发布,您应该添加一个组件来处理Axon的事件并将其发布在Pub / Sub上。为了处理事件,您需要构建StreamableMessageSourceSubscribableMessageSourceTrackingEventProcessorSubscribingEventProcessor分别使用这些接口,而这些接口又是负责处理事件的技术方面的组件。

顺便说一句,如果您要构建这样的扩展并且需要帮助,最好在AxonIQ论坛上进行请求,您可以找到here

最后一点,也是我要说的很重要的一个论点是,这样的连接器将无法处理所有类型的消息。如果您需要功能更成熟的Axon应用程序以分布式方式运行,我强烈建议您尝试一下Axon Server,然后从头开始构建自己的解决方案。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...