项目作者: grissomlau

项目描述 :
.netcore micro service framework
高级语言: C#
项目地址: git://github.com/grissomlau/jimu.git
创建时间: 2018-05-28T03:02:08Z
项目社区:https://github.com/grissomlau/jimu

开源协议:Apache License 2.0

下载


Description

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

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

更多详情,查看 Wiki

这里感谢 RabbitTeam 开源的 RabbitCloud (2018),因为Jimu的动态代理和远程调用都参考了该项目

特点

  1. 使用 Apache License 2.0 开源协议
  2. jimu 最核心的思想是 IOC 和 DI, 通过配置文件使用了 autofac 将组件注入到框架中,用组件来驱动框架,使框架更具弹性。
  3. 服务注册与发现: consul
  4. 动态网关
  5. 基于 DotNetty 的 RPC
  6. JWT 鉴权
  7. 负载均衡:轮询
  8. 容错策略: 重试
  9. 容器发布 docker
  10. 路由配置: Attribute 注解
  11. 日志记录: log4net, nlog
  12. Api 文档: swagger
  13. 链路跟踪: skywalking
  14. RESTful: Attribute 注解
  15. 健康监测
  16. 文件上存下载:多文件和单文件
  17. uri跳转: 服务端跳转指定的 url
  18. ORM: Dapper
  19. DDD: MiniDDD
  20. 缓存: Memcached
  21. 消息队列:RabbitMq

Quick Start

请下载 jimu 源码, 或者下载项目 jimu.demo

Install

  1. 启动 consul;
  2. 设置 Samples/ApiGateway, Samples/Server.Auth, Samples/Server.Order, Samples/Server.User 为启动项;
  3. 打开 http://localhost:54762/swagger/index.html

配置

服务端

日志

  1. JimuLog4netOptions: Log4net 日志组件

    1. {
    2. "JimuLog4netOptions":{
    3. "EnableConsoleLog":true,
    4. "EnableFileLog":true,
    5. "FileLogPath":"log",
    6. "FileLogLevel":"Debug,Info,Warn,Error",
    7. "ConsoleLogLevel":"Debug,Info,Warn,Error",
    8. "UseInService": true // ILogger 是否注入到 service
    9. }
    10. }
  2. JimuNLogOptions: NLog 组件

授权

  1. JwtAuthorizationOptions: Jwt 授权

    1. {
    2. "JwtAuthorizationOptions":{
    3. "ServiceInvokeIp": "${SERVICE_INVOKE_IP}", //服务宿主的地址
    4. "ServiceInvokePort": "${SERVICE_INVOKE_PORT}",
    5. "Protocol": "Netty", //传输协议:Http,Netty
    6. "SecretKey": "123456", //生成token 的钥匙
    7. "ValidateLifetime": true,
    8. "ExpireTimeSpan": "0.16:0:0", //token 有效时长: day.hour:minute:second
    9. "ValidateIssuer": false, //
    10. "ValidIssuer": "",
    11. "ValidateAudience": false,
    12. "ValidAudience": "",
    13. "TokenEndpointPath": "/v2/token", //获取 token 的路径
    14. "CheckCredentialServiceId": "Auth.IServices.IAuthService.Check(context)" //验证用户名密码是否正确的 service id, context JwtAuthorizationContext,包含 UserNamePassword等调用上下文信息
    15. }
    16. }

    服务发现

  2. ConsulOptions: 使用 Consul 作为服务发现组件
  1. {
  2. "ConsulOptions":{
  3. "Ip": "127.0.0.1", //consul ip
  4. "Port": "8500", // consul port
  5. "ServiceGroups": "ctauto.test.store", //服务注册所属的组别
  6. "ServiceInvokeIp": "127.0.0.1", //服务宿主的地址
  7. "ServiceInvokePort": "8004 //服务宿主的端口
  8. }
  9. }

服务调用协议

  1. TransportOptions: 服务调用的传输组件

    1. {
    2. "TransportOptions":{
    3. "Ip": "127.0.0.1", //服务宿主ip
    4. "Port": 8001, //服务宿主端口
    5. "Protocol": "Netty", //传输协议: Netty, Http
    6. "ServiceInvokeIp": "127.0.0.1", //服务宿主的地址
    7. "ServiceInvokePort": "8001"
    8. }
    9. }

服务

  1. ServiceOptions: 服务配置
    1. {
    2. "ServiceOptions":{
    3. "Path": "",//服务dll所在路径,默认当前目录
    4. "LoadFilePattern": "IService.dll,Service.dll",//需要加载的服务dll,支持统配符:*.dll,*.txt
    5. }
    6. }
ORM

数据库接入

  1. Dapper

    1. {
    2. "DapperOptions": {
    3. "ConnectionString": "server=localhost;database=grissom_dev;user=root;pwd=root;",
    4. "DbType": "MySql" //数据库类型,支持: MySQL,SQLServer,Oracle,SQLite, PostgreSQL
    5. }
    6. }
MiniDDD Repository

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

  1. Dapper

    1. {
    2. "MiniDDDDapperOptions": {
    3. "ConnectionString": "server=localhost;database=grissom_dev;user=root;pwd=root;",
    4. "DbType": "MySql" //数据库类型,支持: MySQL,SQLServer,Oracle,SQLite, PostgreSQL
    5. // 没有 sql 日志可输出
    6. }
    7. }
  1. EF

    1. {
    2. "MiniDDDEFOptions": {
    3. "ConnectionString": "server=localhost;database=grissom_dev;user=root;pwd=root;",
    4. "DbType": "MySql", //数据库类型,支持: MySQL,SQLServer,Oracle,SQLite, PostgreSQL
    5. "TableModelAssemblyName": "",//EF对应的表的实体类dll, Server 项目引用了则不需要设置
    6. "OpenLogTrace":false, //是否开启 sql 日志,一般 debug 时开启方面查看生成的 sql
    7. "LogLevel":"Debug" //日志级别: Debug,Information,Warning,Error
    8. }
    9. }
  1. SqlSugar

    1. {
    2. "MiniDDDSqlSugarOptions": {
    3. "ConnectionString": "server=localhost;database=grissom_dev;user=root;pwd=root;",
    4. "DbType": "MySql", //数据库类型,支持: MySQL,SQLServer,Oracle,SQLite, PostgreSQL
    5. "OpenLogTrace":false, //是否开启 sql 日志,一般 debug 时开启方面查看生成的 sql,没有日志级别可选
    6. }
    7. }

客户端

日志

  1. JimuLog4netOptions: Log4net 日志组件

    1. {
    2. "JimuLog4netOptions":{
    3. "EnableConsoleLog":true,
    4. "EnableFileLog":true,
    5. "FileLogPath":"log",
    6. "FileLogLevel":"Debug,Info,Warn,Error",
    7. "ConsoleLogLevel":"Debug,Info,Warn,Error"
    8. }
    9. }
  1. JimuNLogOptions: NLog 组件

授权

  1. JwtAuthorizationOptions: Jwt 授权,支持在客户端实现 jwt 授权,服务端不需要配置
  1. {
  2. "JwtAuthorizationOptions":{
  3. "Protocol": "Http", //传输协议:Http,Netty
  4. "SecretKey": "123456", //生成token 的钥匙
  5. "ValidateLifetime": true,
  6. "ExpireTimeSpan": "0.16:1:0", //token 有效时长: day.hour:minute:second
  7. "ValidateIssuer": false, //
  8. "ValidIssuer": "",
  9. "ValidateAudience": false,
  10. "ValidAudience": ""
  11. }
  12. }

服务发现

  1. ConsulOptions: 使用 Consul 作为服务发现组件
  1. {
  2. "ConsulOptions":{
  3. "Ip": "127.0.0.1",//consul ip
  4. "Port": 8500,// consul port
  5. "ServiceGroups": "MyService",//服务注册所属的组别
  6. }
  7. }

服务发现刷新频率

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

    1. {
    2. "DiscoveryOptions":{
    3. "UpdateJobIntervalMinute":1//单位分钟,1分钟刷新一次
    4. }
    5. }

容错机制

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

    1. {
    2. "FaultTolerantOptions":{
    3. "RetryTimes":0 //服务调用失败重试次数
    4. }
    5. }

服务健康监测

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

    1. {
    2. "HealthCheckOptions":{
    3. "IntervalMinute":1 //心跳监测时间间隔,单位分钟
    4. }
    5. }

负载均衡

  1. LoadBalanceOptions

    1. {
    2. "LoadBalanceOptions":{
    3. "LoadBalance":"Polling" //负载均衡算法: Polling - 轮询
    4. }
    5. }

远程代理

  1. ServiceProxyOptions

    1. {
    2. "ServiceProxyOptions":{
    3. "AssemblyNames":["IOrderServices.dll","IUserServices.dll"]//代理接口dll配置
    4. }
    5. }

客户端获取请求 token 的方式

  1. TokenGetterOptions

    1. {
    2. "TokenGetterOptions":{
    3. "GetFrom":"HttpHeader" //从http header 获取, Request.Headers["Authorization"]
    4. }
    5. }

服务调用

  1. TransportOptions: 服务调用的传输组件

    1. {
    2. "TransportOptions":{
    3. "Protocol":"Netty" //传输协议: Netty
    4. }
    5. }

About Me

问题请提交 issues 和 PR
项目的更多资料正在断断续续地整理, 可关注我的 博客园