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



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

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

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

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

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

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

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

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

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

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

如果是对的,我认为嘲笑并不难。

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

因为复合服务不需要关心我们需要什么来使用某个库进行清单。清单微服务项目仅公开用于使用清单服务的终结点。

在微服务领域,服务是一等公民。微服务将服务终结点公开为 API,并抽象其所有实现详细信息。内部实现逻辑、体系结构和技术(包括编程语言、数据库、服务质量机制等(完全隐藏在服务 API 后面。

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

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

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

我可以建议通过注意防损层模式直接调用运输服务,该模式使您的实际域的服务代码与其他微服务的域实体保持干净。

您可以在此处找到有关反腐败层的更多信息 https://softwareengineering.stackexchange.com/questions/184464/what-is-an-anti-corruption-layer-and-how-is-it-used

最新更新