.NET Core

MassTransit Get Started->

半腔热情 提交于 2020-09-29 15:47:04
MassTransit:是一款.NET的分布式应用程序框架(开源、免费)。通过MassTransit,可以轻松创建利用基于消息的、松耦合异步通信的应用程序和服务,以提高可用性,可靠性和可伸缩性。 MassTransit本身定位轻量级的服务总线,并支持多种传输方式如:RabbitMQ、Azure Service Bus、ActiveMQ、Amazon SQS、Kafka、Azure Event Hub。消息异常处理:重试配置、重新交付、erro管道、死信管道。分布式事务处理:sagas、Courier。容器支持:.NETcore自身的、autofac、castle windsor等、调度支持:Quartz 、hangfire。更多功能参考官网文档。 MassTransit目前已经发布到了第7个版本了,7.0版本新增了对Kafka 的支持,构建仅支持.NET Standard 2.0...其他改动不大。MassTransit社区使用也是很活跃的,对于首次接触的,通过本篇文章(基于rabbitmq)帮你快速入门! 一个应用程序或服务可以使用两种不同的方法来生产消息,主要区别是sent需要指定具体的端点地址,而pub不需要,下面的代码会演示这两种方式。 发布事件(多个接收者) 发送命令(一个接收者) 发布事件(事件消息) 场景假设:在xx项目中,需要与第三方进行交互。比如:订单发货之后

ASP.NET Core 2.0 MVC项目实战

一个人想着一个人 提交于 2020-09-28 13:50:17
一、前言 毕业后入职现在的公司快有一个月了,公司主要的产品用的是C/S架构,再加上自己现在还在学习维护很老的delphi项目,还是有很多不情愿的。之前实习时主要是做.NET的B/S架构的项目,主要还是用的那种传统的开发模式,只有一个项目用到了Web API,自己负责后端的接口功能实现。既然现在没办法改变现状,那就先改变自己吧。定了个计划,下班后慢慢的开始学习ASP.NET Core Web API和Vue,准备从前端到后端自己写一个小项目玩玩,毕竟代码这个东西,时间长了是会忘的。 嗯,有点扯远了。这个MVC项目是我的毕业设计,虽然写的比较烂,而且当时为了赶紧写完,代码的冗余程度有点高,但还是希望能给一些准备入门ASP.NET Core MVC的童鞋提供些借鉴吧。代码我放到Github上了,源码地址 https://github.com/Lanesra712/Danvic.PSU ,欢迎大神们拍砖,指出不足处。 二、项目介绍 毕业论文的课题是一个大学生的一个报名系统,主要是为了完成大学生报名过程中的一些数据维护,当然最后因为实在来不及了,好多都没做。。。项目主要使用到的相关技术如下所示: 项目框架:ASP.NET Core 2.0 MVC ORM:Entity Framework Core(使用Code First) 数据库引擎:MySQL SERVER 5.7 权限验证

.NET Core 中生成验证码

旧时模样 提交于 2020-09-27 11:45:59
在开发中,有时候生成验证码的场景目前还是存在的,本篇演示不依赖第三方组件,生成随机验证码图片。 先添加验证码接口 public interface ICaptcha { /// <summary> /// 生成随机验证码 /// </summary> /// <param name="codeLength"></param> /// <returns></returns> Task<string> GenerateRandomCaptchaAsync(int codeLength = 4); /// <summary> /// 生成验证码图片 /// </summary> /// <param name="captchaCode">验证码</param> /// <param name="width">宽为0将根据验证码长度自动匹配合适宽度</param> /// <param name="height">高</param> /// <returns></returns> Task<CaptchaResult> GenerateCaptchaImageAsync(string captchaCode, int width = 0, int height = 30); } 验证码返回模型 public class CaptchaResult { /// <summary> ///

ABP VNext实践之搭建可用于生产的IdentityServer4

房东的猫 提交于 2020-09-27 05:43:52
一、前言 用了半年多的abp vnext,在开发的效果还是非常的好,可以说节省了很多时间,像事件总线、模块化开发、动态API进行远程调用、自动API控制器等等,一整套的规范,让开发人员更方便的集成,提升效率;大家如果想多了解abp vnext 更多的资料或者源码,可以到github上看,文章结尾也会给出源码地址和wiki地址,优秀的你们要更优秀才行。 今天给大家讲讲如何在利用abp vnext框架搭建IDS4且可以在生产环境下使用的,其中也需要针对于IDS4在liunx系统使用nginx代理中端点不是https的特别注意事项配置,这个也是一个坑,如果不注意,授权就不成功,除非配置了跳过https的强制验证; 二、ABP VNext CLI生成一个项目解决方案 CLI 命令大家可以参考wiki,命令如下:abp new Louie.Ids4Demo --ui none --separate-identity-server,其中 --separate-identity-server代表将IdentityServer应用程序与API host应用程序分开,--ui none 无UI;打开命令窗口,拷贝进去后就可以生成一个解决方案; 然后我们授权需要修改一下项目中的代码迁移配置,因为我这边用的是mysql,而命令生成的是使用sqlserver,在 Louie.Ids4Demo

.net core kafka 入门实例 一篇看懂

本秂侑毒 提交于 2020-08-20 09:31:56
.net core kafka 入门实例 一篇看懂 kafka 相信都有听说过,不管有没有用过,在江湖上可以说是大名鼎鼎,就像天龙八部里的乔峰。国际惯例,先介绍生平事迹 简介 Kafka 是由 Apache软件基金会 开发的一个开源流处理平台,由 Scala 和 Java 编写。Kafka是一种高吞吐量的 分布式 ,支持分区(partition),多副本(replica)的 发布订阅消息系统 。与其他MQ最大不同是Topic 具有分区(Partition)的概念,消息出队的速度也比其他MQ快。 特性及适用场景 高吞吐量、低延迟 可扩展性:集群支持热扩展 持久性、可靠性 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败) 高并发:支持数千个客户端同时读写 常用场景 日志收集 消息系统:生产者和消费者、缓存消息等。 用户活动跟踪:流网页、搜索、点击等活动 运营指标 工作流处理 对实时性要求不高的数据处理 Kafka基础概念 Topic Kafka 中可将消息分类,每一类的消息称为一个 Topic(主题),消费者可以对不同的 Topic 进行不同的处理。Topic相当于传统消息系统MQ中的一个队列queue,producer端发送的message必须指定是发送到哪个topic,但是不需要指定topic下的哪个partition

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

梦想与她 提交于 2020-08-20 08:18:55
写在前面 微软在更新.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", optional: true,

.NET中的缓存实现

混江龙づ霸主 提交于 2020-08-20 08:15:55
软件开发中最常用的模式之一是 缓存, 这是一个简单但非常有效的概念, 想法是重用操作结果, 执行繁重的操作时,我们会将结果保存在 缓存容器中, 下次我们需要该结果时,我们将从缓存容器中取出它,而不是再次执行繁重的操作。 例如,要获得某人的头像,您可能需要前往数据库。 我们不会每次都执行那次查询,而是将结果保存在缓存中,每次需要时都将其从内存中删除。 缓存非常适合不经常更改的数据, 甚至永远不会改变。 不断变化的数据不适合缓存,如当前机器的时间不应缓存,否则您将得到错误的结果。 进程内缓存,持久化缓存和分布式缓存 进程内缓存 用于在单个进程中实现缓存时, 当进程终止时,缓存会随之消失。 如果您在多个服务器上运行相同的进程,则每个服务器都有一个单独的缓存。 持久化缓存 是指在进程内存之外备份缓存, 它可能位于文件中,也可能位于数据库中。 这实现比较困难,但如果重新启动进程,缓存不会丢失。 分布式缓存 是指您为多台计算机提供共享缓存, 通常它将是几个服务器, 使用分布式缓存,它存储在外部服务中。 这意味着如果一台服务器保存了缓存项,其他服务器也可以使用它。 像 Redis 这样的 服务 非常适合这种情况。 单线程的缓存 public class NaiveCache<T> { private static Dictionary< object , T> _cache = new

C# .net Core 文件上传

痴心易碎 提交于 2020-08-20 06:34:56
.net core 和.net framework上传文件还是有一些区别的有很多注意的地方 .net framework 上传文件用httppostedfilebase .net core 上传文件用 IFormFile 下面废话不多说了,直接上代码 控制器里面写 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using CoreUpLoad.Models; using Microsoft.AspNetCore.Http; using System.IO; namespace CoreUpLoad.Controllers { public class HomeController : Controller { public IActionResult Index() { return View(); } [HttpPost] public IActionResult UpLoad(IFormFile file) { return View(); } }

.NetCore从零开始使用Skywalking分布式链路追踪系统

只谈情不闲聊 提交于 2020-08-20 00:06:19
当我们用很多服务时,各个服务间的调用关系是怎么样的?各个服务单调用的顺序\时间性能怎么样?服务出错了,到底是哪个服务引起的?这些问题我们用什么方案解决呢,以前的方式是各个系统自己单独做日志,出了问题从暴出问题的服务开始一个一个服务的排查,耗时耗力,有些日志不全的,还不一定查得出来。好在现在有Skywalking链路追踪系统,可以不用写任何代码,就追踪到各个服务间的调用关系和性能状态等。 本文将从0开始搭建两个webapi项目,使用Skywalking来追踪他们之间的调用关系及响应时间。开发环境为VisualStudio2019 1:安装Skywalking ,可参考: https://www.cnblogs.com/sunyuliang/p/11422576.html ,本列中搭建好后的Skywalking服务器地址为:192.168.150.134 2:打开VS创建一个demo1的webapi项目。 2.1:为项目添加NuGet程序包SkyAPM.Agent.AspNetCore的引用   2.2,在项目根目录添加skyapm.json文件,并添加下以内容,其中的Servers结点的IP地址根据实际情况换成自己的服务器IP { "SkyWalking": { "ServiceName": "Demo01", "Namespace": "", "HeaderVersions": [

(1)RabbitMQ简介与安装

耗尽温柔 提交于 2020-08-19 22:16:06
1.RabbitMQ简介 因为RabbitMQ是基于开源的AMQP协议来实现的,所以在了解MQ时候,首先我们来了解下AMQP协议。AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端或者中间件不同产品、不同的开发语言等条件的限制,也就是说消息生产者无需知道消费者如何处理消息结果,反之亦然,解耦了组件跟组件依赖。RabbitMQ服务器端用Erlang语言编写,同时也支持多种客户端来开发跨语言消息传递,例如:Java,.NET,PHP,Python,JavaScript,Ruby,Go等。RabbitMQ还支持多种消息传递协议、消息排队、传递确认、队列的灵活路由、多种交换类型。还支持分布式集群以实现高可用性和吞吐量。适用于排队算法、秒杀活动、消息分发、异步处理、数据同步、处理耗时任务、CQRS等应用场景。还可以通过HTTP-API命令行工具和用于管理和监视RabbitMQ的UI。 2.RabbitMQ在CentOS 7安装 因为我对Linux运维知识面比较薄弱,所以在Linux上部署RabbitMQ这块暂时不想耗太多时间在这上面去(后续有时间再深入了解),这里我完全是跟着园区Net大神晓晨大佬这篇文章