Mendix多租户技术实践 - Part II
精华
红猪
2021.07.02 15:46发布于技术 - 集成与扩展
2262
继Mendix多租户技术实践 - Part I,本篇将重点讲述基于租户的页面链接,租户的数据存储和检索的附加实现。

Mendix多租户技术实践 - Part II

简介

实现多租户的方法是很多的,在本篇是在mendix中实现多租户应用的一种方式 使用Deep line module (由mendix提供的模块官方文档Link :https://docs.mendix.com/appstore/modules/deep-link)。博主认为这是一种简单直接的方式在mendix 中实现多租户场景。

Deep link module的设置

这里需要调用一个Microflow - DeepLink.CreateDeeplinkConfig通过传递需要的参数根据你的开发时期或运行时期的现实需求。ObjectAsParameter应该设置为true,这样为了传递Tenant租户的Name 示例:

  • http://localhost:8008/link/rendertenant/tenant_one
  • http://localhost:8008/link/rendertenant/tenant_two

重点提示:参数Parameter的Name应该是小写,并且它应该与接下来作为传递参数的微流名称保持相同。 微流创建的 deeplink示例: http://localhost:8008/link/rendertenant/

image.png

创建Tenant Entity

image.png

tenant_one和tenant_two是Tenant Entity中 Tenant Name的值。 当用户在 Web 浏览器中点击上述任何 URL 链接时,将触发自定义微流 MultiTenancy.RenderTenant。 这完全是在Deep link模块的帮助下完成的。

Mendix多租户示例

这里用一个用例来实现和展示构建的 Mendix 应用程序的多租户机制。 该应用程序将充当企业管理门户,管理员可以在其中根据需要创建租户tenants,并且管理员Admin可以创建 各自的记录将与各自的租户相关联,并且它们也会将一些数据存储到租户数据库中。 因此,创建的应用程序将与自带的数据库一起用作接口,用于轻型数据库事务,以便保存租户基本信息以进行客户端验证。 例如,我们可能需要限制 Admin 以避免冗余,防止将要创建的数据库已经存在。

下图是创建租户的微流

image.png 创建database schema后,Admin管理员可以生成DeepLink并在特定业务单元的用户之间共享。 下图为Deeplink 配置 Render Tenant image.png 用户将使用管理员共享的 url 登录门户进行一些数据库操作。 image.png Entity TargetDB用来控制主数据库连接( database connection )信息比如 Host, port, database, username 和password。 Entity NewSchema 就像传统开发中的POJO对象只用了捕获来自于接口Interface的租户tenant名称,在开始创建租户tenant前

Tenant租户是多租户实现中真正需要的main entity。 除了persistable Entities ,图中还有Non-persistable。这些Non-persistable Entities 将帮助获取保留来自外部数据库的租户的基础数据,最终将这些数据传递到Interface(接口)中。 Entity: Authority Institution和Address都设置为non -persistable。并且在开发中可以根据需求进行自定义。

重点:实体之间的关系是非常重要的可以参考图中的关联关系,可根据自己业务中需求做自定义修改。 image.png image.png 在上图中展示的URL格式: http://localhost:8008/p/[GUID] 来自于 http://localhost:8008/link/rendertenant/[TenantName]. 通过创建Authority权限和创建Institution机构选项,用户可以将他们的数据发布到基于tenant租户的外部数据源,在这个用例中,使用PostgreSQL和PgAdmin作为Client-GUI。 image.png 最重要的是写SQL Queries(查询)。 但是要实现多租户的这种中层数据隔离,我们应该遵循这种方法。 所以 Mendix 的业务工程师应该对 SQL 有一定的了解,才能深入挖掘实现。 但是要编写 DDL 查询,必须具备强大的 SQL 知识。 例如,这就是我们如何形成 SQL 查询的方式,没有太多知识的人可以使用 pgadmin 来检查正确的 SQL 查询的正确语法。 在Mendix Studio Pro中创建SQL语句查询变量。 image.png PgAdmin -客户端的GUI image.png 我们可以交叉检查不同租户数据库中的数据。 image.png image.png 同样,如果需要,我们可以在应用中对相应的数据库交叉检查数据。 到此,我们终于可以在界面中看到一些基于租户的数据了。 Tenant-1 details page with data image.png Tenant-2 details page with data image.png

TOTO、张磊nancal
点赞
收藏
手机查看
举报
2个评论
倒序看帖
仅看楼主
    张磊nancal
    2021.10.13 17:21 发布
    #1
    你好,我对这个项目很感兴趣能否分享出来研究一下,感谢!
    红猪
    点赞
    评论
    举报
    红猪
    评论
    张磊nancal
    2021.10.14 16:05 发布
    这篇文章翻译 英文博客过来的。但是项目我需要一些时间demo出来,近期在做其他项目。
    首赞
    评论
    举报