首页 > 解决方案 > 在微服务架构中集成外部服务

问题描述

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

我做了一项购物服务,提供买书所需的所有东西。但我需要与两个服务集成。

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

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

为了从购物服务连接到这个服务,我认为适配器模式是一个好主意。我做了另一个服务,一个购物适配器服务,用于连接其他两个服务。使用这种架构,我可以模拟适配器服务来测试购物服务。

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

你知道哪个是连接外部或内部服务的最佳架构吗?

标签: restmicroservicesnetflix-feign

解决方案


首先,我理解的是否正确?

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

----------------------------(使用)-->库存服务(本项目使用外部库)

如果是对的,我觉得嘲讽也不难。

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

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

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

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

@Configuration
class MessageHandlerTestConfiguration {

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

推荐阅读