微服务指南
Chameleon 平台支持系统级微服务(SystemSlave),用于提供跨租户的通用扩展能力。
系统级微服务特性
| 支持特性 | 说明 |
|---|---|
| 基本定义 | 用于提供跨租户的通用扩展能力 |
| 使用场景 | 1. SaaS 模式下的主运营实体,可定义一套微服务跨租户使用 2. 安装版 |
| ServiceCall 组件调用 | 支持,服务名称:SystemSlave |
| 微应用中直接调用 | 支持,使用与主站相同 token |
| 微服务中调用主站 OpenAPI | 支持,Security 一致,token 可兼容 |
系统级微服务和主站点交互认证流程
主站点通过接口中 ServiceCall 组件调用微服务

通过对象接口中的服务调用组件代理可以为微服务接口提供平台级的鉴权能力(身份授权)。
主站点前端直接调用微服务

系统级微服务与主站点都具有同样的 SecurityKey,因此 token 可以互相生成与认证。
微服务调用主站点 Open API

系统级微服务与主站点共享 SecurityKey,调用 OpenAPI 时,SDK 会使用该 SecurityKey 生成 system token 进行认证。
配置详情
公共配置
服务可自行创建 ASP.NET Core WebAPI 项目。项目应该使用 Chameleon 主项目提供的 Nuget 包:Chameleon.Common、Chameleon.SDK
该包提供了部分开发时必要的功能:
- 提供了统一的 JWT 权限认证系统,方便业务 API 集成主站点
- 提供全局异常拦截中间件,保持和主站异常处理一致
- 提供多租户中间件,可在项目中灵活获取系统信息
- 统一的数据访问 API SDK
注册 SDK 提供的 Chameleon 中间件
using Chameleon.Common.Middlewares;
namespace Chameleon.Api.Biz
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
// 添加jwt验证
builder.Services.AddChameleonJwt();
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
// 自定义异常
app.UseExceptionMiddleware();
// 添加jwt验证
app.UseAuthentication();
// Chameleon请求上下文中间件
app.UseChameleonContextMiddleware();
// 多 租户
app.UseChameleonMultiTenantMiddleware();
// 身份检验
app.UseAuthorization();
// 全局鉴权
app.MapControllers().RequireAuthorization();
app.Run();
}
}
}
系统级微服务
配置 SecurityKey
配置与主站一致的 SecurityKey 节点。
服务注册
系统级服务地址应该正确注册在主站点的 appsettings.json 配置文件中:
{
"SystemSlaveHost": "http://localhost:5006/"
}
微应用
在微应用中直接使用用户 token 访问系统级微服务。在 Chameleon 接口微服务调用组件中,会直接使用当前登录用户 token 访问系统级微服务。
SDK & OpenAPI
注册主站点地址:
{
"MainServiceHost": "http://localhost:5000/"
}
- 在脚本中通过 SDK 访问 OpenAPI,会自动使用主站 SecurityKey 生成 system token 进行调用
- 在系统微服务中通过 SDK 访问 OpenAPI,会使用配置中的 SecurityKey(与主站配置一致)生成 system token 进行调用
- 在系统微服务中自行通过代码访问 OpenAPI,使用 SDK 提供的
OpenApiHelper.GetSystemUserToken来获取 system token 进行调用
开发规范
异常处理
微服务模板中已经使用了 SDK 提供的中间件 UseChameleonCustomExceptionMiddleware,该中间件已经处理好了关于Chameleon通用异常的一切,非特殊必要,不 需要额外自定义异常处理机制。
如果需要为前端提供异常提示,使用Chameleon 系统的标准异常类即可:
throw new ChameleonException("xxx")
前端返回值
SDK 已经封装了通用的前后端交互模型,直接使用SDK的交互模型类即可。
不需要返回数据,只返回提示:
[HttpPost]
public async Task<IActionResult> XX_Method()
{
// Argument verification
// Ensure.ArgumentNotNullOrEmpty(argument, nameof(argument));
// your business code
// ...
// response message alert
return Ok(ResponseResult.Success());
}
如果需要带数据的返回,使用泛型版本
[HttpPost]
public async Task<IActionResult> XX_Method()
{
// Argument verification
// Ensure.ArgumentNotNullOrEmpty(argument, nameof(argument));
// your business code
// ...
// response message alert
return Ok(ResponseResult<List<XX>>.Success(result).Total(result.Count));
}