{"id":13753992,"url":"https://github.com/grissomlau/jimu","last_synced_at":"2026-01-16T08:05:58.194Z","repository":{"id":32824651,"uuid":"135103033","full_name":"grissomlau/jimu","owner":"grissomlau","description":".netcore micro service framework","archived":false,"fork":false,"pushed_at":"2022-07-05T11:16:00.000Z","size":2839,"stargazers_count":358,"open_issues_count":7,"forks_count":115,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-11-27T13:51:26.254Z","etag":null,"topics":["consul","dapper","http","jwt","log4net","microservice","net6","nlog","rpc","swagger"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/grissomlau.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-05-28T03:02:08.000Z","updated_at":"2025-11-12T08:27:07.000Z","dependencies_parsed_at":"2022-09-20T17:20:52.869Z","dependency_job_id":null,"html_url":"https://github.com/grissomlau/jimu","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/grissomlau/jimu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grissomlau%2Fjimu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grissomlau%2Fjimu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grissomlau%2Fjimu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grissomlau%2Fjimu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grissomlau","download_url":"https://codeload.github.com/grissomlau/jimu/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grissomlau%2Fjimu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478047,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["consul","dapper","http","jwt","log4net","microservice","net6","nlog","rpc","swagger"],"created_at":"2024-08-03T09:01:36.676Z","updated_at":"2026-01-16T08:05:58.162Z","avatar_url":"https://github.com/grissomlau.png","language":"C#","funding_links":[],"categories":["C\\#","swagger"],"sub_categories":[],"readme":"\n## Description\njimu 是一个基于.Net6.0 简单易用的微服务框架，参考了很多开源库以及想法，使用了大量的开源库（如 DotNetty, consul.net, Flurl.Http, Json.net, Log4net, Quartz.net ... ）, 支持分布式、高并发和负载均衡， 实现了服务治理（如服务注册、发现、健康检测 ...）和 RPC 调用。  \n\njimu(积木)，正如其中文名，希望用她来开发项目像搭积木一样简单快速可控，使项目安全可靠稳定，整体架构可拓展、高并发、分布式。\n\n更多详情，[查看 Wiki](https://github.com/grissomlau/jimu/wiki)\n\n这里感谢 RabbitTeam 开源的 [RabbitCloud (2018)](https://github.com/RabbitTeam/RabbitCloud)，因为Jimu的动态代理和远程调用都参考了该项目\n\n## 特点\n1. 使用 Apache License 2.0 开源协议\n2. jimu 最核心的思想是 IOC 和 DI, 通过配置文件使用了 autofac 将组件注入到框架中，用组件来驱动框架，使框架更具弹性。\n3. 服务注册与发现: consul\n4. 动态网关\n5. 基于 DotNetty 的 RPC\n6. JWT 鉴权\n7. 负载均衡：轮询\n8. 容错策略: 重试\n9. 容器发布 docker\n10. 路由配置： Attribute 注解\n11. 日志记录： log4net, nlog\n12. Api 文档: swagger\n13. 链路跟踪: skywalking\n14. RESTful: Attribute 注解\n15. 健康监测\n16. 文件上存下载：多文件和单文件\n17. uri跳转: 服务端跳转指定的 url\n18. ORM： Dapper\n19. DDD: MiniDDD\n20. 缓存： Memcached\n21. 消息队列：RabbitMq\n\n\n## Quick Start\n请下载 jimu 源码, 或者下载项目  [jimu.demo](https://github.com/grissomlau/jimu.demo)\n\n## Install\n1. 启动 consul；\n2. 设置 Samples/ApiGateway, Samples/Server.Auth, Samples/Server.Order, Samples/Server.User 为启动项；\n3. 打开 http://localhost:54762/swagger/index.html\n\n\n## 配置\n\n### 服务端\n\n#### 日志\n\n1. JimuLog4netOptions: Log4net 日志组件\n\n   ```json\n   {\n       \"JimuLog4netOptions\":{\n           \"EnableConsoleLog\":true,\n           \"EnableFileLog\":true,\n           \"FileLogPath\":\"log\",\n           \"FileLogLevel\":\"Debug,Info,Warn,Error\",\n           \"ConsoleLogLevel\":\"Debug,Info,Warn,Error\",\n           \"UseInService\": true // ILogger 是否注入到 service\n       }\n   }\n   ```\n\n2. JimuNLogOptions: NLog 组件\n\n#### 授权\n\n1. JwtAuthorizationOptions: Jwt 授权\n\n   ```json\n   {\n       \"JwtAuthorizationOptions\":{\n            \"ServiceInvokeIp\": \"${SERVICE_INVOKE_IP}\", //服务宿主的地址\n           \"ServiceInvokePort\": \"${SERVICE_INVOKE_PORT}\",\n           \"Protocol\": \"Netty\", //传输协议：Http,Netty\n           \"SecretKey\": \"123456\", //生成token 的钥匙\n           \"ValidateLifetime\": true,\n           \"ExpireTimeSpan\": \"0.16:0:0\", //token 有效时长: day.hour:minute:second\n           \"ValidateIssuer\": false, //\n           \"ValidIssuer\": \"\",\n           \"ValidateAudience\": false,\n           \"ValidAudience\": \"\",\n           \"TokenEndpointPath\": \"/v2/token\", //获取 token 的路径\n           \"CheckCredentialServiceId\": \"Auth.IServices.IAuthService.Check(context)\" //验证用户名密码是否正确的 service id, context 是 JwtAuthorizationContext，包含 UserName，Password等调用上下文信息\n       }\n   }\n   ```\n#### 服务发现\n1. ConsulOptions： 使用 Consul 作为服务发现组件\n\n```json\n      {\n          \"ConsulOptions\":{\n       \t\t \"Ip\": \"127.0.0.1\", //consul ip\n         \t\t \"Port\": \"8500\", // consul port\n         \t\t \"ServiceGroups\": \"ctauto.test.store\", //服务注册所属的组别\n         \t\t \"ServiceInvokeIp\": \"127.0.0.1\", //服务宿主的地址\n         \t\t \"ServiceInvokePort\": \"8004 //服务宿主的端口\n          }\n      }\n```\n\n#### 服务调用协议\n\n1. TransportOptions： 服务调用的传输组件\n\n   ```json\n   {\n       \"TransportOptions\":{\n           \"Ip\": \"127.0.0.1\", //服务宿主ip\n           \"Port\": 8001, //服务宿主端口\n           \"Protocol\": \"Netty\", //传输协议： Netty, Http\n           \"ServiceInvokeIp\": \"127.0.0.1\", //服务宿主的地址\n           \"ServiceInvokePort\": \"8001\"\n       }\n   }\n   ```\n\n#### 服务\n\n1. ServiceOptions： 服务配置\n```json\n   {\n       \"ServiceOptions\":{\n           \"Path\": \"\",//服务dll所在路径，默认当前目录\n           \"LoadFilePattern\": \"IService.dll,Service.dll\",//需要加载的服务dll，支持统配符:*.dll,*.txt\n       }\n   }\n```\n\n##### ORM\n\n数据库接入\n\n1. Dapper\n\n   ```json\n   {\n      \"DapperOptions\": {\n        \"ConnectionString\": \"server=localhost;database=grissom_dev;user=root;pwd=root;\",\n        \"DbType\": \"MySql\" //数据库类型，支持： MySQL,SQLServer,Oracle,SQLite, PostgreSQL\n     }\n   }\n   ```\n\n##### MiniDDD Repository\n\nMiniDDD 是一个轻量级的 DDD 框架， MiniDDD Repository 就是基于该框架的数据仓储，支持以下仓储\n\n1. Dapper\n\n   ```json\n   {\n     \"MiniDDDDapperOptions\": {\n       \"ConnectionString\": \"server=localhost;database=grissom_dev;user=root;pwd=root;\",\n       \"DbType\": \"MySql\" //数据库类型，支持： MySQL,SQLServer,Oracle,SQLite, PostgreSQL\n         // 没有 sql 日志可输出\n     }\n   }\n   ```\n\n\n2. EF\n\n   ```json\n   {\n      \"MiniDDDEFOptions\": {\n        \"ConnectionString\": \"server=localhost;database=grissom_dev;user=root;pwd=root;\",\n        \"DbType\": \"MySql\", //数据库类型，支持： MySQL,SQLServer,Oracle,SQLite, PostgreSQL\n        \"TableModelAssemblyName\": \"\",//EF对应的表的实体类dll, Server 项目引用了则不需要设置\n        \"OpenLogTrace\":false, //是否开启 sql 日志,一般 debug 时开启方面查看生成的 sql\n        \"LogLevel\":\"Debug\" //日志级别： Debug,Information,Warning,Error\n      }\n   }\n   ```\n\n\n3. SqlSugar\n\n   ```json\n   {\n       \"MiniDDDSqlSugarOptions\": {\n         \"ConnectionString\": \"server=localhost;database=grissom_dev;user=root;pwd=root;\",\n         \"DbType\": \"MySql\", //数据库类型，支持： MySQL,SQLServer,Oracle,SQLite, PostgreSQL\n         \"OpenLogTrace\":false, //是否开启 sql 日志,一般 debug 时开启方面查看生成的 sql，没有日志级别可选\n      }\n   }\n   ```\n\n\n### 客户端\n\n#### 日志\n\n1. JimuLog4netOptions: Log4net 日志组件\n\n   ```json\n   {\n       \"JimuLog4netOptions\":{\n           \"EnableConsoleLog\":true,\n           \"EnableFileLog\":true,\n           \"FileLogPath\":\"log\",\n           \"FileLogLevel\":\"Debug,Info,Warn,Error\",\n           \"ConsoleLogLevel\":\"Debug,Info,Warn,Error\"\n       }\n   }\n   ```\n\n\n2. JimuNLogOptions: NLog 组件\n\n#### 授权\n\n1. JwtAuthorizationOptions: Jwt 授权，支持在客户端实现 jwt 授权，服务端不需要配置\n\n```json\n{\n    \"JwtAuthorizationOptions\":{\n        \"Protocol\": \"Http\", //传输协议：Http,Netty\n        \"SecretKey\": \"123456\", //生成token 的钥匙\n        \"ValidateLifetime\": true,\n        \"ExpireTimeSpan\": \"0.16:1:0\", //token 有效时长: day.hour:minute:second\n        \"ValidateIssuer\": false, //\n        \"ValidIssuer\": \"\",\n        \"ValidateAudience\": false,\n        \"ValidAudience\": \"\"\n    }\n}\n```\n\n#### 服务发现\n\n1. ConsulOptions： 使用 Consul 作为服务发现组件\n\n```json\n{\n    \"ConsulOptions\":{\n        \"Ip\": \"127.0.0.1\",//consul ip\n        \"Port\": 8500,// consul port\n        \"ServiceGroups\": \"MyService\",//服务注册所属的组别\n    }\n}\n```\n\n#### 服务发现刷新频率\n\n1. DiscoveryOptions：客户端会缓存已发现的服务，设定刷新频率\n\n   ```json\n   {\n       \"DiscoveryOptions\":{\n           \"UpdateJobIntervalMinute\":1//单位分钟，1分钟刷新一次\n       }\n   }\n   ```\n\n#### 容错机制\n\n1. FaultTolerantOptions：服务调用时的容错机制\n\n   ```json\n   {\n       \"FaultTolerantOptions\":{\n           \"RetryTimes\":0 //服务调用失败重试次数\n       }\n   }\n   ```\n\n\n#### 服务健康监测\n\n1. HealthCheckOptions： 根据已发现服务的ip,port 定时进行服务器心跳监测（客户端主动连接）\n\n   ```json\n   {\n       \"HealthCheckOptions\":{\n           \"IntervalMinute\":1 //心跳监测时间间隔，单位分钟\n       }\n   }\n   ```\n\n\n#### 负载均衡\n\n1. LoadBalanceOptions\n\n   ```json\n   {\n       \"LoadBalanceOptions\":{\n           \"LoadBalance\":\"Polling\" //负载均衡算法: Polling - 轮询\n       }\n   }\n   ```\n\n\n#### 远程代理\n\n1. ServiceProxyOptions\n\n   ```json\n   {\n       \"ServiceProxyOptions\":{\n           \"AssemblyNames\":[\"IOrderServices.dll\",\"IUserServices.dll\"]//代理接口dll配置\n       }\n   }\n   ```\n\n#### 客户端获取请求 token 的方式\n\n1. TokenGetterOptions\n\n   ```json\n   {\n       \"TokenGetterOptions\":{\n           \"GetFrom\":\"HttpHeader\" //从http header 获取， Request.Headers[\"Authorization\"]\n       }\n   }\n   ```\n\n#### 服务调用\n\n1. TransportOptions： 服务调用的传输组件\n\n   ```json\n   {\n       \"TransportOptions\":{\n           \"Protocol\":\"Netty\" //传输协议： Netty\n       }\n   }\n   ```\n\n## About Me\n问题请提交 [issues](https://github.com/grissomlau/jimu/issues)  和 PR\n项目的更多资料正在断断续续地整理， 可关注我的 [博客园](http://www.cnblogs.com/grissom007/)  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrissomlau%2Fjimu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrissomlau%2Fjimu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrissomlau%2Fjimu/lists"}