我正在使用Spring和Netflix OSS开发基于微服务架构的书店应用程序。
我提供了购物服务,其中包括买书所需的所有东西。但是我需要与两个服务集成。
一项服务是运输服务,这是一项内部服务。通过Feign客户端连接。
另一项服务是库存服务,这是一项外部服务。通过外部库连接。这是一个问题,因为更难模拟。
为了与购物服务中的该服务建立联系,我认为adapter pattern是个好主意。我提供了另一个服务,即购物适配器服务,用于与其他两个服务连接。通过这种架构,我可以模拟适配器服务来测试购物服务。
但是现在我认为这是一个尴尬的解决方案。
您知道哪种是与外部或内部服务连接的最佳架构?
答案 0 :(得分:3)
首先,我理解的正确吗?
复合服务-(使用)->运送服务
----------------------------(使用)->库存服务(此项目使用外部 图书馆
如果是正确的话,我认为这并不难。
创建用于包装外部库的库存微服务项目。
因为复合服务不需要关心我们需要使用某个库进行库存的东西。您的库存微服务项目仅公开了使用库存服务的端点。
在微服务世界中,服务是一等公民。微服务将服务端点公开为API,并抽象所有实现细节。内部实现逻辑,体系结构和技术(包括编程语言,数据库,服务质量机制等)完全隐藏在服务API的后面。
然后,您可以在复合服务测试代码中模拟库存服务。
@Configuration
class MessageHandlerTestConfiguration {
@Bean
public InventoryClient inventoryClient() {
return Mockito.mock(InventoryClient.class);
}
答案 1 :(得分:0)
我不认为创建另一个微服务,您应该对其进行维护和监视,并保持弹性和高可用性等。仅仅具有某种外观或适配器是一个好主意。在某些非常特殊的情况下,该语句可能被证明是错误的,但是通常,如果您没有要维护的上下文,那么创建一个新的微服务不是一个好主意。
我可以建议直接通过注意反腐败层模式来直接调用运输服务,该模式可以使您的实际域服务代码与其他微服务域实体保持一致。
上找到有关反腐败层的更多信息。