rest - 在微服务架构中集成外部服务
问题描述
我正在使用 Spring 和 Netflix OSS 开发基于微服务架构的书店应用程序。
我做了一项购物服务,提供买书所需的所有东西。但我需要与两个服务集成。
一项服务是运输服务,这是一项内部服务。通过 Feign 客户端连接。
另一个服务是库存服务,这是一个外部服务。通过外部库连接。这是一个问题,因为它更难以模拟。
为了从购物服务连接到这个服务,我认为适配器模式是一个好主意。我做了另一个服务,一个购物适配器服务,用于连接其他两个服务。使用这种架构,我可以模拟适配器服务来测试购物服务。
但现在我认为这是一个有点尴尬的解决方案。
你知道哪个是连接外部或内部服务的最佳架构吗?
解决方案
首先,我理解的是否正确?
复合服务--(使用)--> 运输服务
----------------------------(使用)-->库存服务(本项目使用外部库)
如果是对的,我觉得嘲讽也不难。
创建一个用于包装外部库的库存微服务项目。
因为复合服务不需要关心我们需要使用某个库进行库存。您的 Inventory 微服务项目只是公开使用库存服务的端点。
在微服务世界中,服务是一等公民。微服务将服务端点公开为 API,并抽象出它们的所有实现细节。内部的实现逻辑、架构和技术,包括编程语言、数据库、服务质量机制等等,都完全隐藏在服务 API 后面。
然后,您可以在复合服务测试代码中模拟库存服务。
@Configuration
class MessageHandlerTestConfiguration {
@Bean
public InventoryClient inventoryClient() {
return Mockito.mock(InventoryClient.class);
}
推荐阅读
- python - 在python中,读取txt文本后,如何删除另一个txt文件中存在的单词
- javascript - 在 React-Native 中,使用 navigation.push,我怎样才能保留之前屏幕中的数据?
- php - 将 WooCommerce 电子邮件通知发送到帐单和用户电子邮件地址
- list - List.add 无法正常工作
- java - 无法在 ExifInterface 中正确写入 GPSTimeStamp
- c# - 使用 Unsafe.As 从标记接口转换为已知的泛型类型?
- codeigniter - 如何在 codeigniter4 中使用 cookie 和重定向
- c# - 解析json时如何处理int和int64
- python - 在 .loc[] 中使用 DataFrame 值
- reactjs - 将颜色更改为功能组件