各位大神帮指点下.
我在做一个多租户系统,给予gin / xorm 开发, 大概流程是这样的
1. 登陆总后台,添加一个租户,
2. 根据租户分配的数据库链接地址 生成租户的数据库(一租户一库).
3. 添加租户的域名.后台管理域名,前台域名
======= 问题来了 ========
1. 同一套代码,租户登陆租户后台,执行操作,数据库链接有可能不一样,数据库名一定不一样.
2. 租户登陆的时候在中间件里根据域名判定是哪个租户登陆 然后找到这个租户对应的数据库配置,
3. 链接数据库, DB链接指针放到 gin.Context里面
4. 每次查询的时候,从context获取链接地址
问题是,如果函数调用比较深, 每次都传context, 这样感觉代码太冗余. 有什么好办法不?
3楼 <a href="/user/mi1688" title="@mi1688">@mi1688</a> 做数据库对象集合,不过我目前没有做高并发测试。
//项目的链接池,有多个项目就建多个
var XEngineXm []DbPool
//项目对应的业务数据源。如果相关信息,比如IP,账户,密码修改后,请清理数据源缓存或重启此程序。
var XEngineBiz []DbPool
我这个还是多重集合,每一个租户下,还可以建自己的业务库连接。
#10
更多评论
我前段时间刚好做过一个就是在调用API的时候获取请求的Referer 然后把这个做为参数来匹配响应的数据库
datasources:
- dataSourceLabel: default
mysqlUrl: mysql 连接串
- dataSourceLabel: yyy.domain.com
mysqlUrl: mysql 连接串
#2