.NET Core

造轮子-AgileConfig基于.NetCore的一个轻量级配置中心

柔情痞子 提交于 2020-08-10 07:20:58
微服务确实是行业的一个趋势,我自己也在把一些项目往微服务架构迁移。玩微服务架构配置中心是一个绕不过去的东西,有很多大牌的可以选,比如spring-cloud-config,apoll,disconf等等。而我为什么还要造一个轮子呢?一来这些都不是.net实现的,我就想试试用.net core实现一个,而且他们也对.net不太友好,也只有apoll提供了官方的.net客户端。二来这些组件都太重量级了,比如apoll,光跑起来就要部署多个节点(admin,portal,meta sevice)还要依赖eureka。很多旧的项目往微服务迁移的时候并不是一下次全部调整完成的,可能是一步步来的,比如先把所有的服务都容器化,并没有使用微服务全家桶。而且有的项目也不需要微服务全家桶,毕竟微服务不是银弹,很多项目单体结构就足够了,有些项目传统的SOA架构也可以了。(唠叨一句,那种毫无流量毫无并发的项目,几人几天就搞完的强上微服务真的好吗?)但是这些项目也可能是分布式的,容器化部署的,那么这些项目我觉得也是需要配置中心的,因为在分布式、容器化环境下更改配置实在是太麻烦了。可以说配置中心并不是微服务独有的。基于以上原因我提炼了一些配置中心必备的功能,做的尽量简单(陋),开发了AgileConfig,为.net core的生态尽一份绵薄之力。 Github求star: AgileConfig

dotnet core 2 使用 DispatchProxy 做动态代理 AOP 入门

烈酒焚心 提交于 2020-08-10 07:15:23
本文简单告诉大家如何在 .NET Core 里面使用 AOP 切面编程,使用 DispatchProxy 做任意接口的动态代理实现 使用 DispatchProxy 有一些限制,如只能创建接口的实例。使用 DispatchProxy 可以让咱做到从无中创建出某个实例,这个实例继承咱想要的接口 首先需要创建某个动态代理类继承 DispatchProxy 类,例如创建 Foo 类。此时需要实现 Invoke 接口,这个接口的含义是当代码调用接口里面的函数,包括属性的设置和获取函数的时候将会进入 Invoke 方法 protected override object Invoke(MethodInfo targetMethod, object[] args) { // 忽略代码 } 因此通过 Invoke 方法可以假装自己是对应的接口的实现,可以进行随意更改执行逻辑以及修改返回值 而 DispatchProxy 另一个核心方法是静态的 Create 方法,这个方法要求传入两个泛形,第一个类型是想要创建出来的实例继承的接口,第二个类型是某个继承 DispatchProxy 的类 例如咱定义了一个 IF1 的接口,此时可以在 Foo 添加如下代码创建出一个不存在的类型实例,这个实例继承了 IF1 接口 public class Foo : DispatchProxy { public

基于 abp vNext 和 .NET Core 开发博客项目

僤鯓⒐⒋嵵緔 提交于 2020-08-10 05:29:48
上一篇文章( https://www.cnblogs.com/meowv/p/12961014.html )集成了定时任务处理框架Hangfire,完成了一个简单的定时任务处理解决方案。 本篇紧接着来玩一下AutoMapper,AutoMapper可以很方便的搞定我们对象到对象之间的映射关系处理,同时abp也帮我们是现实了 IObjectMapper 接口,先根据官方文档: https://docs.abp.io/zh-Hans/abp/latest/Object-To-Object-Mapping ,将AutoMapper添加依赖到项目中。 在 .Application 层模块类中添加 AbpAutoMapperModule 模块依赖。 //MeowvBlogApplicationModule.cs using Meowv.Blog.Application.Caching; using Volo.Abp.AutoMapper; using Volo.Abp.Identity; using Volo.Abp.Modularity; namespace Meowv.Blog.Application { [DependsOn( typeof(AbpIdentityApplicationModule), typeof(AbpAutoMapperModule), typeof

.Net Core 权限验证与授权(AuthorizeFilter、ActionFilterAttribute)

血红的双手。 提交于 2020-08-10 04:49:39
在.Net Core 中使用AuthorizeFilter或者ActionFilterAttribute来实现登录权限验证和授权 一、AuthorizeFilter 新建授权类AllowAnonymous继承AuthorizeFilter,IAllowAnonymousFilter public class AllowAnonymous : AuthorizeFilter, IAllowAnonymousFilter { } 新建拦截类继承AuthorizeFilter public class LoginAuthorzation : AuthorizeFilter { } 在拦截类里加入处理请求的方法 /// <summary> /// 请求验证,当前验证部分不要抛出异常,ExceptionFilter不会处理 /// </summary> /// <param name="context"> 请求内容信息 </param> public override async Task OnAuthorizationAsync(AuthorizationFilterContext context) { if (IsHaveAllow(context.Filters)) { return ; } // 解析url // {/ Home / Index} var url = context

基于Docker安装并使用Elastic APM实现指标监控

半腔热情 提交于 2020-08-10 04:34:11
Elastic APM安装教程 一、 CentOS设置 1. 更换阿里源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum makecache 2. 安装网络工具 yum install net-tools wget -y 3. 使用阿里NTP服务 yum install chrony -y sed -i "/server/d" /etc/chrony.conf vi /etc/chrony.conf 增加 server ntp.aliyun.com iburst systemctl restart chronyd chronyc tracking 4. 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 5. 禁用Selinux vi /etc/selinux/config SELINUX=disabled 6. 关闭swap和禁用交换 swapoff -a sudo sysctl vm.swappiness=0 vi /etc/fstab #注释掉swap这行 vi /etc/sysctl.conf 添加如下 vm.swappiness = 0 论证是否生效 sudo sysctl

.NET Core微服务开发网关篇-ocelot

Deadly 提交于 2020-08-10 04:33:54
通过上篇我们知道,网关是外部访问的统一入口,本文采用Ocelot作为Api网关。 环境要求: vs2019 .NetCore3.1 Ocelot16.0.1 创建一个产品服务Api站点(AAStore.ProductCatalog.Api) 添加一个ProductController [Route( " api/[controller] " )] [ApiController] public class ProductController : ControllerBase { [HttpGet(template: " Get " )] public string GetProductById() { return " Product service " ; } } 运行浏览 然后再创建一个订单服务Api站点(AAStore.Orde.Api) 添加一个OrderController [Route( " api/[controller] " )] [ApiController] public class OrderController : ControllerBase { [HttpGet(template: " Get " )] public string GetOrder() { return " Order Service " ; } } 运行浏览 两个服务已经已经准备好了

.Net Core 2.2升级3.1的避坑指南

萝らか妹 提交于 2020-08-10 04:19:52
写在前面   微软在更新.Net Core版本的时候,动作往往很大,使得每次更新版本的时候都得小心翼翼,坑实在是太多。往往是悄咪咪的移除了某项功能或者组件,或者不在支持XX方法,这就很花时间去找回需要的东西了,下面是个人在迁移.Net Core WebApi项目过程中遇到的问题汇总: 开始迁移 1. 修改*.csproj项目文件 <TargetFramework>netcoreapp2. 2 </TargetFramework> 修改为 <TargetFramework>netcoreapp3.1</TargetFramework> 2 修改Program public static void Main( string [] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder( string [] args) => WebHost.CreateDefaultBuilder(args) .UseStartup <Startup>().ConfigureAppConfiguration((hostingContext, config) => { config.AddJsonFile($ " 你的json文件.json " ,

120行代码打造.netcore生产力工具-小而美的后台异步组件

痴心易碎 提交于 2020-08-10 03:46:16
相信绝大部分开发者都接触过用户注册的流程,通常情况下大概的流程如下所示: 接收用户提交注册信息 持久化注册信息(数据库+redis) 发送注册成功短信(邮件) 写操作日志(可选) 伪代码如下: public async Task<IActionResult> Reg([FromBody] User user) { _logger.LogInformation("持久化数据开始"); await Task.Delay(50); _logger.LogInformation("持久化结束"); _logger.LogInformation("发送短信开始"); await Task.Delay(100); _logger.LogInformation("发送短信结束"); _logger.LogInformation("操作日志开始"); await _logRepository.Insert(new Log { Txt = "注册日志" }); _logger.LogInformation("操作日志结束"); return Ok("注册成功"); } 在以上的代码中,我使用Task.Delay方法阻塞主线程,用以模拟实际场景中的执行耗时。以上流程应该是包含了绝大部分注册流程所需要的操作。对于任何开发者来讲,以上业务流程没任何难度,无非是顺序的执行各个流程的代码即可。

基于.Net Core的Redis:实现查询附近的地理信息

时光总嘲笑我的痴心妄想 提交于 2020-08-10 02:19:50
1、使用的Redis客户端为: ServiceStack.Redis 2、 Redis 中的 GEO Redis是我们最为熟悉的K-V数据库,它常被拿来作为高性能的缓存数据库来使用,大部分项目都会用到它。从3.2版本开始它开始提供了GEO能力,用来实现诸如附近位置( e.g.某小区附近的篮球场 )、计算距离等这类依赖于地理位置信息的功能。 本次实例Demo中用到的 GEO命令 有: Redis命令 描述 GEOADD key longitude latitude member [longitude latitude member …] 将指定的地理空间位置(纬度、经度、名称)添加到指定的 key 中 GEODIST key member1 member2 [unit] 返回两个给定位置之间的距离 GEORADIUS key longitude latitude radius 以给定的经纬度为中心, 找出某一半径内的元素 3、 实例Demo 1 using ServiceStack.Redis; 2 using System; 3 using System.Collections.Generic; 4 using System.Text; 5 6 namespace RedisDemo 7 { 8 class NearByDemo 9 { 10 public static void

因为我最近忙、所以我写了它

人走茶凉 提交于 2020-08-10 00:55:06
一、事出有因 1、上周工作原因项目的事情每天都很忙,周五下班和乐师兄下班的时候已经晚上11点了,然后和师兄吃了一个烧烤吃到了12点了(结果啥也没吃,钱也花了挺多的。ps:程序员建议养生)扯远了 ,主要是一周比较忙周六没有进行我们学校的健康报备信息填写。导致辅导员给我打了6个电话(现在我还是在实习中,所以还归学校管)自己刚好在看网络请求这一块的东西,说干就干!!! 二、知其所以然 1、我们学校的健康报备主要是将自己每天的信息填写到学校的公众号上面。打开页面是这样的。这个时候我们就要想一下我们是要做什么了。首先我们健康报备的流程是=>打开学校公众号=>输入自己的学号点击查询=>然后输入自己的正式情况=>点击提交。 三、反向分析 1、做为程序员的我们首先要清楚我们要什么,现在我们已经清楚了要做什么了和步骤。现在就是用我们的程序模拟用户进行正常的报备工作。首先我将报备链接从学校公众号复制出来,然后使用浏览器访问查看我们在进行报备的时候我们向浏览器发起了什么和做了什么。 2、在左边的是我们的页面,右边的是网页请求的文件和信息,我们就一步一步的进行分析。这里我们可以看到我们在访问页面的时候会生成一些信息_ _EVENTVALIDATION 、 __VIEWSTATEGENERATOR 我以前在长沙写的也是ASPX页面使用控件程序的时候也会生成一些这个