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":{
"GetFrom":"HttpHeader" //从http header 获取, Request.Headers["Authorization"]
}
}
服务调用
TransportOptions: 服务调用的传输组件
{
"TransportOptions":{
"Protocol":"Netty" //传输协议: Netty
}
}
dotnet core微服务框架Jimu介绍的更多相关文章
- 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)
一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...
- hello world .net core 微服务框架 Viper
1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...
- 基于.NET CORE微服务框架 -谈谈surging API网关
1.前言 对于最近surging更新的API 网关大家也有所关注,也收到了不少反馈提出是否能介绍下Api网关,那么我们将在此篇文章中剥析下surging的Api 网关 开源地址:https://git ...
- 基于.NET CORE微服务框架 -浅析如何使用surging
1.前言 surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人 ...
- 微服务框架Lagom介绍之一
背景 Lagom是JAVA系下响应式 微服务框架,在阅读本文之前请先阅读微服务架构设计,Lagom与其他微服务框架相比,与众不同的特性包括: 目前,大多数已有的微服务框架关注于简化单个微服务的构建-- ...
- 微服务框架 ketchup 介绍
1.背景 在ketchup诞生之前.期间也是用surging开发了两个项目.奈何surging没有文档,升级之后,只能从头在读一遍源码,了解新功能,会消耗大量的时间.商业化也使一些 想学习微服务的人望 ...
- net core 微服务框架 Viper 调用链路追踪
1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...
- 基于.NET CORE微服务框架 -谈谈surging的服务容错降级
一.前言 对于不久开源的surging受到不少.net同学的青睐,也受到.net core学习小组的关注,邀请加入.NET China Foundation以方便国内.net core开源项目的推广, ...
- dotnet core 微服务教程
这个教程主要是对于第一次使用dotnet core开发的同学. 运行环境是在centos 7 , 使用了docker容器. 即这是一篇运行在linux的docker容器上的微服务的简单应用. 一. 安 ...
- 【Tars】腾讯微服务框架Tars介绍
目录 1.介绍2.设计思路3.整体架构4.平台特性1. 介绍 Tars是[基于名字服务][使用Tars协议]的高性能[RPC]开发框架,同时配套一体化的[服务治理平台],帮助个人或者企业快速的以微服务 ...
随机推荐
- 朋友吐槽我为什么这么傻不在源生成器中用string.GetHashCode, 而要用一个不够优化的hash方法
明明有更好的hash方法 有位朋友对我吐槽前几天我列举的在源生成器的生成db映射实体的优化点 提前生成部分 hashcode 进行比较 所示代码 public static void Generate ...
- grpc报错合集以及解决方案
这里介绍下grpc各种报错以及解决方案 io.grpc.StatusRuntimeException: UNIMPLEMENTED 这个错误网上很多,大部分情况下 是由于方法找不到,即客户端与服务端p ...
- Atcoder ABC364 D-F
Atcoder ABC364 D-F D - K-th Nearest 链接: D - K-th Nearest (atcoder.jp) 简要题意: 问题陈述 在一条数线上有 \(N+Q\) 个点 ...
- 记一次 .NET某实验室自动进样系统 崩溃分析
一:背景 1. 讲故事 前些天有位朋友在微信上联系到我,说他们的程序在客户那边崩掉了,让我帮忙看下怎么回事,dump也拿到了,那就上手分析吧. 二:WinDbg 分析 1. 哪里的崩溃 既然是程序的崩 ...
- android 访问域名接口报错
1. 移动端访问https域名及接口,显示 java.net.UnknownHostException: Unable to resolve host "xxx" : No add ...
- PyTorch从入门到放弃之张量模块
目录 张量的数据类型 torch.rand()函数 torch.randn()函数 torch.normal()函数 torch.linspace()函数 torch.manual_seed()函数 ...
- attention, transformers
这啥呀,慢慢啃 Attention 最初来源于 NLP 机器翻译的 Sequence to Sequence 模型,早先的encoder-decoder结构随着句子长度增加翻译性能会下降,因为模型记不 ...
- MYSQL数据库备份还原,并还原到最新状态(mysqldump)
启用二进制日志文件 vim /etc/my.cnf 配置文件位置及文件名根据实际情况确定<br>sql_log_bin=on|off:是否记录二进制日志,默认为on 在需要的时候设置为of ...
- Kafka原理剖析之「Topic创建」
一.前言 Kafka提供了高性能的读写,而这些读写操作均是操作在Topic上的,Topic的创建就尤为关键,其中涉及分区分配策略.状态流转等,而Topic的新建语句非常简单 bash kafka-to ...
- 为什么在EffectiveJava中建议用EnumSet替代位字段,以及使用EnumMap替换序数索引
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,在第37条中建议 用EnumMap替换序数索引,为什么? EnumSet 在EffectiveJava中的第 36条中 ...