<分区>
我是微服务架构的新手,
例如,我们在隔离机器和两个 sql 数据库中有两个独立的服务,
Location.Service 有一个如下所示的数据库
Locations:
[
{Id: key, Name: string}
]
Product.Service 有一个如下所示的数据库
Products:
[
{Id: key, Name: string, LocationId: key}
]
这两个服务可以使用基于事件的消息协议(protocol)(如 AMQP)正确协同工作,一切听起来都非常好。 但我在像这样在 UI 中列出产品时遇到问题
ProductId(ok), ProductName(ok), ProductLocationId(ok), ProductLocationName(???)
我怎样才能找到使用位置名称列出产品的解决方案?
在简单的单体应用程序中,我们可以很容易地在这些表之间进行连接,但是在多个数据库上会出现问题吗?
解决方案 1:查询应该有一个嵌套的,例如在 ORM 工具中有这样的 locationName
var products = productService.select(p => new ProductDto{
ProductId= p.Id,
ProductName= p.Name,
LocationId= p.LocationId,
LocationName= locationService.getNameById(p.LocationId)
}).ToList();
可能这种方式不合理
解决方案 2:像这样更改 ProductService 的数据库设计
Products
[
{Id: key, Name: string, LocationId: key, LocationName: string}
]
这样,如果使用 locationService 的位置名称已更改,我应该更新所有产品位置名称(使用事件消息)
所以,我认为这种方式应该在项目结构中引起一些困惑
解决方案3:这两个服务应该在同一个服务中!
所以在敏捷项目中,我们无法预估 future ,所以我们不得不将所有服务归为一项服务,这显然是不推荐的!
解决这个问题的最佳想法是什么?