微服务和消息传递:消息内容

时间:2016-10-24 10:39:10

标签: java spring rabbitmq microservices

我正在构建一个由几个微服务组成的应用程序。其中一个名为Hera的微服务管理用户。另一个微服务管理授权和认证。这个微服务称为Zeus,是Spring OAuth 2.0的一个实现。

在Hera中创建,更新或删除用户时,我想通过RabbitMQ将某些信息复制到Zeus。此信息包括用户名,用户类型(枚举)和用于指示用户是否已启用的标志。

我已经设置了RabbitMQ,一切正常。我唯一不确定的是邮件正文内容。如何将这些信息打包在邮件中?例如,我应该创建一个包含POJO的maven项目,该项目具有所需的属性,这些属性将被编组并通过RabbitMQ发送并在Hera和Zeus中为该项目添加依赖项?或者我应该将此信息添加为普通属性列表?

我找不到关于这个主题的最佳做法或指南,所以我问你。

提前谢谢!

3 个答案:

答案 0 :(得分:1)

我会为DTO使用公共库,但您需要具有容忍的序列化并允许版本差异,例如处理添加/删除字段或更改数据类型。如果您共享代码,则必须允许代码在每个服务中运行不同的版本,以便在升级一个服务时不会强制更新任何其他服务。

答案 1 :(得分:0)

我认为Zera中的User对象和Zeus中的User对象指向相同的身份,但它们是不同的对象,应该根据服务需求在每个服务中实现。

公共库需要重新部署依赖它的所有服务。 如果您想要在Hera中存储一些其他信息(在新字段中),您将不得不重新部署Zeus或开始处理不同版本的库(再次引导您到两个不同的对象)。

答案 2 :(得分:0)

我建议你像这样使用POJO + JSON + GSON

POJO(DTO) - >序列化为JSON(使用GSON) - >通过Message Broker(RabbitMQ)传输 - >对其进行反序列化(使用GSON) - >再次获得POJO(DTO)并消费它。

当您使用事件来源+ CQRS 并且您希望遵守 CAP 定理并使用 BASE 而不是ACID时,此方法很常见(ACID不可能在分发系统中实施)