dotnet core微服务框架Jimu介绍

dotnet core微服务框架Jimu介绍

jimu 是一个基于.Net6.0 简单易用的微服务框架,参考了很多开源库以及想法,使用了大量的开源库(如 DotNetty, consul.net, Flurl.Http, Json.net, Log4net, Quartz.net ... ), 支持分布式、高并发和负载均衡, 实现了服务治理(如服务注册、发现、健康检测 ...)和 RPC 调用。

jimu(积木),正如其中文名,希望用她来开发项目像搭积木一样简单快速可控,使项目安全可靠稳定,整体架构可拓展、高并发、分布式。

特点

使用 Apache License 2.0 开源协议

jimu 最核心的思想是 IOC 和 DI, 通过配置文件使用了 autofac 将组件注入到框架中,用组件来驱动框架,使框架更具弹性。

服务注册与发现: consul

动态网关

基于 DotNetty 的 RPC

JWT 鉴权

负载均衡:轮询

容错策略: 重试

容器发布 docker

路由配置: Attribute 注解

日志记录: log4net, nlog

Api 文档: swagger

链路跟踪: skywalking

RESTful: Attribute 注解

健康监测

文件上存下载:多文件和单文件

uri跳转: 服务端跳转指定的 url

ORM: Dapper

DDD: MiniDDD

缓存: Memcached

消息队列:RabbitMq

Install

启动 consul;

设置 Samples/ApiGateway, Samples/Server.Auth, Samples/Server.Order, Samples/Server.User 为启动项;

打开 http://localhost:54762/swagger/index.html

配置

服务端

日志

JimuLog4netOptions: Log4net 日志组件

{

    "JimuLog4netOptions":{

        "EnableConsoleLog":true,

        "EnableFileLog":true,

        "FileLogPath":"log",

        "FileLogLevel":"Debug,Info,Warn,Error",

        "ConsoleLogLevel":"Debug,Info,Warn,Error",

        "UseInService": true // ILogger 是否注入到 service }

}

 

JimuNLogOptions: NLog 组件

授权

JwtAuthorizationOptions: Jwt 授权

{

    "JwtAuthorizationOptions":{

         "ServiceInvokeIp": "${SERVICE_INVOKE_IP}", //服务宿主的地址

        "ServiceInvokePort": "${SERVICE_INVOKE_PORT}",

        "Protocol": "Netty", //传输协议:Http,Netty

        "SecretKey": "123456", //生成token 的钥匙

        "ValidateLifetime": true,

        "ExpireTimeSpan": "0.16:0:0", //token 有效时长: day.hour:minute:second

        "ValidateIssuer": false, //

        "ValidIssuer": "",

        "ValidateAudience": false,

        "ValidAudience": "",

        "TokenEndpointPath": "/v2/token", //获取 token 的路径

        "CheckCredentialServiceId": "Auth.IServices.IAuthService.Check(context)" //验证用户名密码是否正确的 service id, context 是 JwtAuthorizationContext,包含 UserName,Password等调用上下文信息 }

}

服务发现

ConsulOptions: 使用 Consul 作为服务发现组件

{

          "ConsulOptions":{

                "Ip": "127.0.0.1", //consul ip

                  "Port": "8500", // consul port

                  "ServiceGroups": "ctauto.test.store", //服务注册所属的组别

                  "ServiceInvokeIp": "127.0.0.1", //服务宿主的地址

                  "ServiceInvokePort": "8004 //服务宿主的端口 }

      }

服务调用协议

TransportOptions: 服务调用的传输组件

{

    "TransportOptions":{

        "Ip": "127.0.0.1", //服务宿主ip

        "Port": 8001, //服务宿主端口

        "Protocol": "Netty", //传输协议: Netty, Http

        "ServiceInvokeIp": "127.0.0.1", //服务宿主的地址

        "ServiceInvokePort": "8001"

    }

服务

ServiceOptions: 服务配置

{

       "ServiceOptions":{

           "Path": "",//服务dll所在路径,默认当前目录

           "LoadFilePattern": "IService.dll,Service.dll",//需要加载的服务dll,支持统配符:*.dll,*.txt }

   }

ORM

数据库接入

Dapper

{

   "DapperOptions": {

     "ConnectionString": "server=localhost;database=grissom_dev;user=root;pwd=root;",

     "DbType": "MySql" //数据库类型,支持: MySQL,SQLServer,Oracle,SQLite, PostgreSQL }

}

MiniDDD Repository

MiniDDD 是一个轻量级的 DDD 框架, MiniDDD Repository 就是基于该框架的数据仓储,支持以下仓储

Dapper

{

  "MiniDDDDapperOptions": {

    "ConnectionString": "server=localhost;database=grissom_dev;user=root;pwd=root;",

    "DbType": "MySql" //数据库类型,支持: MySQL,SQLServer,Oracle,SQLite, PostgreSQL

      // 没有 sql 日志可输出 }

}

EF

{

   "MiniDDDEFOptions": {

     "ConnectionString": "server=localhost;database=grissom_dev;user=root;pwd=root;",

     "DbType": "MySql", //数据库类型,支持: MySQL,SQLServer,Oracle,SQLite, PostgreSQL

     "TableModelAssemblyName": "",//EF对应的表的实体类dll, Server 项目引用了则不需要设置

     "OpenLogTrace":false, //是否开启 sql 日志,一般 debug 时开启方面查看生成的 sql

     "LogLevel":"Debug" //日志级别: Debug,Information,Warning,Error }

}

SqlSugar

{

    "MiniDDDSqlSugarOptions": {

      "ConnectionString": "server=localhost;database=grissom_dev;user=root;pwd=root;",

      "DbType": "MySql", //数据库类型,支持: MySQL,SQLServer,Oracle,SQLite, PostgreSQL

      "OpenLogTrace":false, //是否开启 sql 日志,一般 debug 时开启方面查看生成的 sql,没有日志级别可选 }

}

客户端

日志

JimuLog4netOptions: Log4net 日志组件

{

    "JimuLog4netOptions":{

        "EnableConsoleLog":true,

        "EnableFileLog":true,

        "FileLogPath":"log",

        "FileLogLevel":"Debug,Info,Warn,Error",

        "ConsoleLogLevel":"Debug,Info,Warn,Error"

    }

}

JimuNLogOptions: NLog 组件

授权

JwtAuthorizationOptions: Jwt 授权,支持在客户端实现 jwt 授权,服务端不需要配置

{

    "JwtAuthorizationOptions":{

        "Protocol": "Http", //传输协议:Http,Netty

        "SecretKey": "123456", //生成token 的钥匙

        "ValidateLifetime": true,

        "ExpireTimeSpan": "0.16:1:0", //token 有效时长: day.hour:minute:second

        "ValidateIssuer": false, //

        "ValidIssuer": "",

        "ValidateAudience": false,

        "ValidAudience": ""

    }

}

服务发现

ConsulOptions: 使用 Consul 作为服务发现组件

{

    "ConsulOptions":{

        "Ip": "127.0.0.1",//consul ip

        "Port": 8500,// consul port

        "ServiceGroups": "MyService",//服务注册所属的组别 }

}

服务发现刷新频率

DiscoveryOptions:客户端会缓存已发现的服务,设定刷新频率

{

    "DiscoveryOptions":{

        "UpdateJobIntervalMinute":1//单位分钟,1分钟刷新一次 }

}

容错机制

FaultTolerantOptions:服务调用时的容错机制

{

    "FaultTolerantOptions":{

        "RetryTimes":0 //服务调用失败重试次数 }

}

服务健康监测

HealthCheckOptions: 根据已发现服务的ip,port 定时进行服务器心跳监测(客户端主动连接)

{

    "HealthCheckOptions":{

        "IntervalMinute":1 //心跳监测时间间隔,单位分钟 }

}

负载均衡

LoadBalanceOptions

{

    "LoadBalanceOptions":{

        "LoadBalance":"Polling" //负载均衡算法: Polling - 轮询 }

}

远程代理

ServiceProxyOptions

{

    "ServiceProxyOptions":{

       

 "AssemblyNames":["IOrderServices.dll","IUserServices.dll"]//代理接口dll配置 }

}

客户端获取请求 token 的方式

TokenGetterOptions

{

    "TokenGetterOptions":{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛马程序员2025

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值