【问题标题】:Dropwizard: Microservice ArchitectureDropwizard:微服务架构
【发布时间】:2016-09-05 22:15:29
【问题描述】:

这类似于How to deserialize from a file to different class。但是,我正在使用 Dropwizard 开发微服务。

我有两个服务,服务 A 和服务 B。我在这两个服务之间设置了一个消息队列 (RabbitMQ)。

我正在尝试将 A 类类型的对象(在服务 A 中定义)从服务 A 发送到服务 B。我没有在服务 B 中导入 A 类。但是在服务 B 中我定义了完全相同的 B 类作为A类。

当服务 B 尝试反序列化并将对象类型转换为 B 类时,我收到 ClassNotFoundException: Class A in service B。

我希望这两个罐子尽可能独立。 有没有办法做到这一点。

【问题讨论】:

  • 你使用 XML, JSON, ...吗?
  • 不。我在服务 A 中使用 ObjectOuputStream 对对象进行反序列化,并在服务 B 上使用 ObjectinputStream 将其序列化回来。简而言之,消息以字节数组的形式发送。
  • 为什么你觉得有必要避免将 A 类消耗到服务 B 中。这只是一个数据合同。
  • 是的,我明白了,但这会产生依赖关系吗?
  • 说,我添加了一个新的服务,服务 C,并且一些数据/对象从服务 A 或服务 B 发送到服务 C,我也需要使用它。它不会使服务膨胀并增加它们之间的依赖关系。所以我想知道的是,有没有一种方法可以让微服务在不知道彼此存在的情况下相互通信?

标签: dropwizard microservices


【解决方案1】:

您可以使用 Apache Avro 在两个服务之间序列化(预定义的 avro 架构)您的对象,或者如果您想在它们之间使用队列。最重要的是,您将降低所需的网络字节,因为 apache avro 序列化非常好。

你也可以使用CatainProto或ProtoBuffer,但我喜欢apache avro方法。

【讨论】:

猜你喜欢
  • 2015-12-26
  • 2016-11-23
  • 2018-03-29
  • 2019-03-23
  • 2016-11-22
  • 2019-05-17
  • 1970-01-01
  • 2014-01-08
相关资源
最近更新 更多