将外部服务集成到微服务架构中

时间:2018-09-06 06:50:23

标签: rest microservices netflix-feign

我正在使用Spring和Netflix OSS开发基于微服务架构的书店应用程序。

我提供了购物服务,其中包括买书所需的所有东西。但是我需要与两个服务集成。

一项服务是运输服务,这是一项内部服务。通过Feign客户端连接。

另一项服务是库存服务,这是一项外部服务。通过外部库连接。这是一个问题,因为更难模拟。

为了与购物服务中的该服务建立联系,我认为adapter pattern是个好主意。我提供了另一个服务,即购物适配器服务,用于与其他两个服务连接。通过这种架构,我可以模拟适配器服务来测试购物服务。

但是现在我认为这是一个尴尬的解决方案。

您知道哪种是与外部或内部服务连接的最佳架构?

2 个答案:

答案 0 :(得分:3)

首先,我理解的正确吗?

  

复合服务-(使用)->运送服务

     

----------------------------(使用)->库存服务(此项目使用外部   图书馆

如果是正确的话,我认为这并不难。

创建用于包装外部库的库存微服务项目。

因为复合服务不需要关心我们需要使用某个库进行库存的东西。您的库存微服务项目仅公开了使用库存服务的端点。

  

在微服务世界中,服务是一等公民。微服务将服务端点公开为API,并抽象所有实现细节。内部实现逻辑,体系结构和技术(包括编程语言,数据库,服务质量机制等)完全隐藏在服务API的后面。

然后,您可以在复合服务测试代码中模拟库存服务。

@Configuration
class MessageHandlerTestConfiguration {

  @Bean
  public InventoryClient inventoryClient() {
    return Mockito.mock(InventoryClient.class);
  }

答案 1 :(得分:0)

我不认为创建另一个微服务,您应该对其进行维护和监视,并保持弹性和高可用性等。仅仅具有某种外观或适配器是一个好主意。在某些非常特殊的情况下,该语句可能被证明是错误的,但是通常,如果您没有要维护的上下文,那么创建一个新的微服务不是一个好主意。

我可以建议直接通过注意反腐败层模式来直接调用运输服务,该模式可以使您的实际域服务代码与其他微服务域实体保持一致。

您可以在https://softwareengineering.stackexchange.com/questions/184464/what-is-an-anti-corruption-layer-and-how-is-it-used

上找到有关反腐败层的更多信息。