sql - 如何使用微服务架构模拟连接概念

标签 sql database microservices

<分区>

我是微服务架构的新手, 例如,我们在隔离机器和两个 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 ,所以我们不得不将所有服务归为一项服务,这显然是不推荐的!

解决这个问题的最佳想法是什么?

最佳答案

假设您基于某些因素提出了产品和位置微服务。由于您需要这两个数据集之间的相关性,因此必须在另一个负责此的微服务中完成。这项新服务将与这 2 个服务交互以完成任务

关于sql - 如何使用微服务架构模拟连接概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45779616/

相关文章:

sql - Webmatrix - 将项目列为搜索词?

SQL查询以更新表中的前1条记录

mysql - 设置 MySQL 复制?

mysql - Oracle数据库链接速度有多快?

java - Tomcat/Java 应用程序的数据库/查询优化器

google-cloud-functions - 如何在 8.0 版中使用 `target: "无服务器”`通过 Next.js 正确实现无服务器 SSR

php - 我的概念是否遵循微服务架构?

java - 带嵌套列表的 jOOQ 查询

mysql - 在单个 sql 查询中选择或选择

java - 如何设计基于微服务的应用程序,每个微服务都有自己的数据源?