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

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

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 日志组件

    {
    "JimuLog4netOptions":{
    "EnableConsoleLog":true,
    "EnableFileLog":true,
    "FileLogPath":"log",
    "FileLogLevel":"Debug,Info,Warn,Error",
    "ConsoleLogLevel":"Debug,Info,Warn,Error",
    "UseInService": true // ILogger 是否注入到 service
    }
    }
  2. JimuNLogOptions: NLog 组件

授权

  1. 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等调用上下文信息
    }
    }

服务发现

  1. 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 //服务宿主的端口
}
}

服务调用协议

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

    {
    "TransportOptions":{
    "Ip": "127.0.0.1", //服务宿主ip
    "Port": 8001, //服务宿主端口
    "Protocol": "Netty", //传输协议: Netty, Http
    "ServiceInvokeIp": "127.0.0.1", //服务宿主的地址
    "ServiceInvokePort": "8001"
    }

服务

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

数据库接入

  1. 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 就是基于该框架的数据仓储,支持以下仓储

  1. Dapper

    {
    "MiniDDDDapperOptions": {
    "ConnectionString": "server=localhost;database=grissom_dev;user=root;pwd=root;",
    "DbType": "MySql" //数据库类型,支持: MySQL,SQLServer,Oracle,SQLite, PostgreSQL
    // 没有 sql 日志可输出
    }
    }
  2. 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
    }
    }
  3. SqlSugar

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

客户端

日志

  1. JimuLog4netOptions: Log4net 日志组件

    {
    "JimuLog4netOptions":{
    "EnableConsoleLog":true,
    "EnableFileLog":true,
    "FileLogPath":"log",
    "FileLogLevel":"Debug,Info,Warn,Error",
    "ConsoleLogLevel":"Debug,Info,Warn,Error"
    }
    }
  2. JimuNLogOptions: NLog 组件

授权

  1. 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": ""
}
}

服务发现

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

服务发现刷新频率

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

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

容错机制

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

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

服务健康监测

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

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

负载均衡

  1. LoadBalanceOptions

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

远程代理

  1. ServiceProxyOptions

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

客户端获取请求 token 的方式

  1. TokenGetterOptions

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

服务调用

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

    {
    "TransportOptions":{
    "Protocol":"Netty" //传输协议: Netty
    }
    }
 

dotnet core微服务框架Jimu介绍的更多相关文章

  1. 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)

    一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...

  2. hello world .net core 微服务框架 Viper

    1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...

  3. 基于.NET CORE微服务框架 -谈谈surging API网关

    1.前言 对于最近surging更新的API 网关大家也有所关注,也收到了不少反馈提出是否能介绍下Api网关,那么我们将在此篇文章中剥析下surging的Api 网关 开源地址:https://git ...

  4. 基于.NET CORE微服务框架 -浅析如何使用surging

    1.前言 surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人 ...

  5. 微服务框架Lagom介绍之一

    背景 Lagom是JAVA系下响应式 微服务框架,在阅读本文之前请先阅读微服务架构设计,Lagom与其他微服务框架相比,与众不同的特性包括: 目前,大多数已有的微服务框架关注于简化单个微服务的构建-- ...

  6. 微服务框架 ketchup 介绍

    1.背景 在ketchup诞生之前.期间也是用surging开发了两个项目.奈何surging没有文档,升级之后,只能从头在读一遍源码,了解新功能,会消耗大量的时间.商业化也使一些 想学习微服务的人望 ...

  7. net core 微服务框架 Viper 调用链路追踪

    1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...

  8. 基于.NET CORE微服务框架 -谈谈surging的服务容错降级

    一.前言 对于不久开源的surging受到不少.net同学的青睐,也受到.net core学习小组的关注,邀请加入.NET China Foundation以方便国内.net core开源项目的推广, ...

  9. dotnet core 微服务教程

    这个教程主要是对于第一次使用dotnet core开发的同学. 运行环境是在centos 7 , 使用了docker容器. 即这是一篇运行在linux的docker容器上的微服务的简单应用. 一. 安 ...

  10. 【Tars】腾讯微服务框架Tars介绍

    目录 1.介绍2.设计思路3.整体架构4.平台特性1. 介绍 Tars是[基于名字服务][使用Tars协议]的高性能[RPC]开发框架,同时配套一体化的[服务治理平台],帮助个人或者企业快速的以微服务 ...

随机推荐

  1. baselines算法库common/vec_env/vec_env.py模块分析

    common/vec_env/vec_env.py模块内容: import contextlib import os from abc import ABC, abstractmethod from ...

  2. 强化学习分布式经验回放框架(experience replay)reverb的安装

    框架reverb的相关介绍: https://www.cnblogs.com/devilmaycry812839668/p/16260799.html ======================== ...

  3. 除了Ubuntu以外的Linux系统可以安装Tensorflow/Pytorch的GPU版本吗???

    废话: 平时没事有用到的Linux系统有Centos/Redhat/Ubuntu/UOS/Deepin,其中Ubuntu系统主要是用来工作生产的,UOS就是看看国家队的进展如何,Deepin就是看看民 ...

  4. flex布局被内容被撑开及flex布局下定宽元素被压缩

    实现效果使用flex进行左右布局,左边定宽200px,右边自适应,当右边内容过多,造成右边盒子被撑开,会造成两种问题 左边定宽盒子被压缩解决办法: flex-grow:0;//是否自动增长空间 fle ...

  5. VideoGeneration

    Stable Video Diffusion: Scaling Latent Video Diffusion Models to Large Datasets 主要贡献:设计了一套数据清洗策略来清洗大 ...

  6. mongodb 中嵌套数组的且查询

    如果在mongodb中存在如下数据 { audit:{ experts:[{expertId:"1",result:"success",......} {exp ...

  7. 和xshell和crt说再见,认识了一款55k star多端跨平台终端神器,强大酷炫

    一.Tabby简介 Tabby(以前称为Terminus)是一款高度可配置的终端仿真器.SSH 和串行客户端.开源且跨平台,支持在Windows.macOS和Linux系统下使用. 源码下载 http ...

  8. Camera | 10.linux驱动 led架构-基于rk3568

    前面文章我们简单给大家介绍了如何移植闪光灯芯片sgm3141,该驱动依赖了led子系统和v4l2子系统. V4L2可以参考前面camera系列文章,本文主要讲述led子系统. 一.LED子系统框架 L ...

  9. 折腾 Quickwit,Rust 编写的分布式搜索引擎 - 从不同的来源摄取数据

    摄取 API 在这节教程中,我们将介绍如何使用 Ingest API 向 Quickwit 发送数据. 要跟随这节教程,您需要有一个本地的 Quickwit 实例正在运行. https://quick ...

  10. 总结篇4:redis 核心数据存储结构及核心业务模型实现应用场景

    总结篇4:redis 核心数据存储结构及核心业务模型实现应用场景 redis 和memcached 有什么区别?为什么在高并发下,单线程的redis 比多线程的效率高? mc 可以缓存图片和视频,re ...