ASP.NET Core使用RabbitMQ和MassTransit
MassTransit一、MassTransit 基本概念定位:基于 .NET 平台 的开源消息总线框架,用于构建分布式、异步通信的应用程序,支持多种消息传输协议(如 RabbitMQ、Azure Service Bus、Kafka 等)。设计目标:简化分布式系统中消息传递的开发,提供高层次的抽象(如消费者、管道、 Saga 模式等),降低开发者对消息中间件底层细节的依赖。 核心特点多传输协议支持:可无缝集成 RabbitMQ、Azure Service Bus、Kafka、ActiveMQ 等多种消息代理。编程模型友好:基于 C# 语言,支持依赖注入(DI)和 Lambda 表达式,代码简洁易读。内置消费者管道(Consumer Pipeline),支持消息过滤、重试、日志记录等中间件。分布式事务支持:通过 Saga 模式 实现长流程事务的异步协调(如订单状态更新、支付回调处理)。高可用性与监控:支持消费者集群和负载均衡。集成 Prometheus、Grafana 等监控工具,提供运行时指标和健康检查。 应用场景.NET 微服务架构:作为服务间通信的核心组件(尤其适合 C#...
如何安装RabbitMQ服务器
在Windows安装RabbitMQ安装RabbitMQ需要安装Erlang环境,网址:Downloads - Erlang/OTP 下载对应的版本RabbitMQ Erlang Version Requirements — RabbitMQ 配置Erlang环境变量 在搜索框里输入编辑系统环境变量. 变量名一定要写成ERLANG_HOME,变量值就是你的Erlang的安装路径 还需要在系统变量中选中Path进行编辑,新建一个%ERLANG_HOME%\bin 打开命令窗口,输入erl或者erl -version()验证环境是否配置成功(出现以下版本号即成功,显示不是内部命令则环境变量配置失败) 安装RabbitMQ RabbitMQ官网下载址:Installing on Windows — RabbitMQ 配置RabbitMQ环境变量 进入sbin文件下,打开命令窗口输入1rabbitmq-plugins enable...
.NET Core的聚合,MediatR实现领域事件
聚合在.NET中的实现上下文可以从数据库中查询出数据并且跟踪对象状态的改变,然后把对象状态的改变保存到数据库中,因此上下文就是一个天然的仓储的实现;上下文会跟踪多个对象状态的改变,让后在SaveChanges方法中把所有的改变一次性提交到数据库中,这是个“要么全部成功,要么全部失败”的操作,因此上下文也是一个天然的工作单元的实现。 有一些开发人员会再编写仓储和工作单元的接口以封装上下文的操作,这样可以把EF Core的操作封装起来,不仅可以让代码不依赖于EF Core,而且今后如果我们需要把EF Core替换为其他持久化机制,代码切换起来也会更容易。但是本书将直接用上下文作为仓储,而不是定义一个仓储的抽象层,微软也是这样建议的。因为EF Core是一个很好的仓储和工作单元的实现框架,很难找到另一款可以很好实现DDD的ORM框架,无论抽象层怎么定义,如果需要把EF Core替换为其他ORM框架,代码就不可能不做任何改变。我们直接用上下文做仓储,这样可以最大化地利用EF Core的特性,从而提供更高性能的仓储实现。 在EF...
.NET Core的DDD的技术落实
贫血模型与充血模型在面向对象的设计中有贫血模型与充血模型两种风格。所谓的贫血模型指的是一个类中只有属性或者成员变量,没有方法,而充血模型指的是一个类中既有属性、成员变量,也有方法。 假设我们需要定义一个类,这个类中可以保存用户的用户名、密码就、积分;用户必须具有用户名;为了保证安全,密码采用密码的哈希值保存;用户的初始积分为10;每次登录成功奖励5个积分,每次登录失败扣3个积分(这样的需求肯定是不合理的) 贫血模型逻辑代码: 123456class User{ public string UserName{get;set;}//用户名 public string PasswordHash {get;set;}//密码的散列值 public int Credit...
ASP.NET Core程序的发布
网站发布 不能直接把bin/Debug部署到生产环境的服务器上,性能低。应该创建网站的发布版,用【发布】功能。 两种部署模式:“框架依赖”和“独立”。两者的优缺点。 独立模式为什么要选目标操作系统和CUP类型。 如果你使用 Visual Studio,可以通过以下步骤发布: 在解决方案资源管理器中右键点击项目 选择 “发布” 选择发布目标(文件夹、IIS、Azure 等)我们这里选择使用文件夹的方式发布。 配置发布设置(如目标框架、运行时、是否自包含等) 点击 “发布” 按钮 框架依赖部署(FDD)特点 依赖共享运行时:应用程序依赖目标环境中已安装的 .NET 运行时(如 .NET 6/7/8)。 体积小:发布包仅包含应用代码和第三方依赖(如 NuGet 包),不包含 .NET 运行时,因此包体积小。 跨平台兼容性:发布包不包含运行时,需确保目标环境的运行时版本与开发环境兼容。 更新便捷:.NET 运行时由操作系统或管理员统一更新,应用无需包含运行时更新。 适用场景 目标环境已预装 .NET...
SignaLR案例:导入英汉词典
SignaLR案例:导入英汉词典需求 英汉词典ECDICT中导入单词到数据库。 T_Worditems:Id(主键)、Word(单词)、Phonetic(音标)、Definition(英文解释)、Translation(中文翻译) 下载地址:https://github.com/skywind3000/ECDICT CSV(Comma-Separated Values)是一种常用的文本文件格式,用于存储和交换表格数据。以下是关于 CSV 格式的详细介绍: 特点 简单性:CSV 格式非常简单,它以纯文本形式存储数据,每行代表一条记录,字段之间用逗号分隔。这种简单的结构使得 CSV 文件易于阅读、编写和解析,几乎所有的文本编辑器和电子表格软件都能处理 CSV 文件。通用性:CSV 是一种通用的格式,可被多种应用程序识别和导入,如电子表格软件(如 Microsoft Excel、Google Sheets)、数据库管理系统、数据分析工具等。这使得它成为不同系统之间数据交换的常用格式。 数据表示 记录:CSV...
ASP.NET Core SignaLR服务器端消息推送
什么是WebSocket和SignalR WebSocket基于TCP协议,支持二进制通信,双工通信。 性能和并发能力更强。 WebSocket服务器端部署到Web服务器上,因为可以借助HTTP协议完成初始的握手(可选),并且共享HTTP服务器的端口(主要) 虽然WebSocket是独立于HTTP的,但是我们一般仍然把WebSocket服务器端部署到Web服务器上,因为我们需要借助HTTP完成初始的握手,并且共享HTTP服务器的端口,这样就可以避免为WebSocket单独打开新的服务器端口。因此,SignalR的服务器端一般运行在ASP.NET Core项目中。 SignIR ASP.NET Core SignalR(以下简称SignalR),是.NET Core平台下对WebSocket的封装。 Hub(集线器),数据交换中心。 SignalR基本使用第一步,创建一个继承自Hub类的ChatRoomHub类,所有的客户端和服务器端都通过这个集线器进行通信. 12345678910111213141516public class...