gpt4 book ai didi

node.js - 在不同的微服务中序列化多对多表

转载 作者:太空宇宙 更新时间:2023-11-04 01:42:19 26 4
gpt4 key购买 nike

我有两个微服务,一个微服务的数据库包含用户表,另一个微服务的数据库包含组表。有许多用户,每个用户可以属于许多或根本不属于,每个可以包含许多用户或根本没有用户。在组数据库中,我创建了连接表groups_users,其中有两列userIdgroupid

我知道使用 Sequelize 我必须在组微服务中执行类似的操作:

  export default (sequelize, DataTypes) => {
const Groups = sequelize.define('Groups', {
uuid: {
type: Sequelize.UUID,
defaultValue: uuidv4().replace(/-/g, ""),
primaryKey: true
},
name: Sequelize.STRING
});
Groups.associate = (models) => {
Groups.belongsToMany(models.Users, {
through: 'groups_users',
as: 'groups',
foreignKey: 'userId'
});
};
return Groups;
};

但是在这一行中:

Groups.belongsToMany(models.Users, {

我没有 models.Users,因为它位于另一个微服务中,所以在这种情况下,处理此问题的最佳方法是什么?

最佳答案

构建微服务时的一个好习惯是,您应该始终为微服务提供自己的数据库。让其他有界上下文访问您的数据库是陷入死星陷阱模式(架构反模式,微服务由于高耦合而相互纠缠)的第一步。

为了解决您的问题,您可能需要为您的群组微服务提供用户数据的副本/部分。这样,两个微服务都将具有持久层独立性。

可用于在有界上下文(用户和组)之间实现数据共享的一种技术是消息队列。每当用户表上的用户记录发生更改时,您都可以在队列上发送消息,并且后台守护程序可以监听此队列中的更改,并创建在组数据库上发生更改的用户记录的副本/部分。

更多引用:

https://learn.microsoft.com/en-us/dotnet/standard/microservices-architecture/architect-microservice-container-applications/data-sovereignty-per-microservice

http://www.pogsdotnet.com/2018/08/api-gateway-in-nutshell.html

关于node.js - 在不同的微服务中序列化多对多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52507441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com