microservices - 如何在谷歌云平台实现微服务 Saga
问题描述
我正在研究在 GCP 中托管在 K8S 中的平台中实现微服务 Saga 模式的解决方案。有 2 个选项:Eventulate Tram 和 Axon。但是,这些框架似乎不支持由云提供商管理的消息代理,例如 google-cloud-Pubsub,而我不想将 Kafka 或 RabbitMQ 部署到 K8S,因为 GCP 已经支持 PubSub。
那么有什么方法可以集成 Eventulate 或 Axon 以使用谷歌云 PubSub?谢谢
解决方案
不确定 Eventuate 对此的看法,但 Axon 使用扩展作为Axon Server以外的消息代理。在 Axon 的整个生命周期(阅读:过去 10 年)中,已经提供了其中一些,但目前没有一个用于 Axon 框架定义的所有类型的消息。因此,例如,您将无法使用 Kafka 在 Axon 中发送命令。
有这个道理吗?命令、事件和查询具有不同的路由要求,应通过使用正确的工具来反映这些要求。
在 Axon 方面更具体一点,可以使用以下扩展来分发您的消息:
- AMQP -> 事件
- 卡夫卡-> 事件
- JGroups -> 用于命令
- Spring Cloud Discovery -> 用于命令
如您所知,目前没有可让您分发消息的 Pub/Sub 扩展程序。除此之外,我的直觉会告诉我它是否可用,然后由于 Pub/Sub 的意图是成为消息代理,它可能仅用于事件消息。
幸运的是,这实际上使得自己创建这样的扩展变得相当简单。深入了解构建它的所有细节会有点多,所以我建议在实现这一点时先看看 Axon 的 AMQP 扩展。关于此事的提示是,为了发布,您应该添加一个组件来处理 Axon 的事件并将它们发布到 Pub/Sub 上。为了处理事件,您需要构建一个StreamableMessageSource
or SubscribableMessageSource
。这些接口分别由TrackingEventProcessor
和使用SubscribingEventProcessor
,它们又是负责处理事件处理技术方面的组件。
顺便说一句,如果您要构建这样的扩展并且需要帮助,最好在 AxonIQ 论坛上提出请求,您可以在此处找到该论坛。
最后一点,我要说的相当重要的一点是,这种连接器不能处理所有类型的消息的论点。如果您需要更完整的 Axon 应用程序以分布式方式运行,我强烈建议您先尝试 Axon Server,然后再从头开始构建您自己的解决方案。