热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

.Net简单使用CAP+RabbitMQ完成事件的发布与订阅

简介CAP是一个EventBus,同时也是一个在微服务或者SOA系统中解决分布式事务问题的一个框架【官网】使用第一步:创建发布者(Angel.Ca

简介

CAP 是一个EventBus,同时也是一个在微服务或者SOA系统中解决分布式事务问题的一个框架【官网】


使用


  • 第一步:创建发布者(Angel.Cap.Publisher)与订阅者(Angel.Cap.Subscriber)两个应用程序,在Nuget上引用主要依赖:DotNetCore.CAP、DotNetCore.CAP.RabbitMQ;用的是Sql Server,还要引用后面三个引用
    在这里插入图片描述
  • 第二步:搭建发布者 Angel.Cap.Publisher

  1. 添加数据库连接字符串

"ConnectionStrings": { //连接字符串"AngelDBContext": "data source=.;initial catalog=AngelCapDB;User ID=sa;Password=sa;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"}

  1. 添加DBContext

public class PubDBContext : DbContext{public PubDBContext(){}public PubDBContext(DbContextOptions<PubDBContext> options) : base(options){}protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){base.OnConfiguring(optionsBuilder);}}

  1. Configure和ConfigureServices使用

public void ConfigureServices(IServiceCollection services)
{services.AddControllersWithViews();//注入数据库services.AddDbContext<PubDBContext>(options &#61;> options.UseSqlServer(Configuration["ConnectionStrings:AngelDBContext"]));//注册cap事件services.AddCap(x &#61;>{x.UseEntityFramework<PubDBContext>();x.UseRabbitMQ(rb &#61;>{rb.HostName &#61; "localhost";rb.UserName &#61; "admin";rb.Password &#61; "admin";rb.Port &#61; 5672;rb.VirtualHost &#61; "Angel2022";rb.ExchangeName &#61; "AngelCapExchange";rb.QueueMessageExpires &#61; 24 * 3600 * 10; });});}public void Configure(IApplicationBuilder app, IWebHostEnvironment env, PubDBContext efCoreApp)
{if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseExceptionHandler("/Home/Error");// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.app.UseHsts();}app.UseHttpsRedirection();app.UseStaticFiles();app.UseRouting();efCoreApp.Database.EnsureCreated();//数据库不存在自动创建app.UseAuthorization();app.UseEndpoints(endpoints &#61;>{endpoints.MapControllerRoute(name: "default",pattern: "{controller&#61;Home}/{action&#61;Index}/{id?}");});
}

  1. 创建发布接口

[Route("api/[controller]/[action]")]
[ApiController]
public class PubController : ControllerBase
{private ICapPublisher _capBus;public PubController(ICapPublisher capBus){this._capBus &#61; capBus;}[HttpGet]public IActionResult SendMsg(){for (var i &#61; 0; i < 1000; i&#43;&#43;){DateTime date &#61; DateTime.Now;_capBus.Publish("angel", $"******发布者&#xff0c;发布的内容为&#xff1a; {date},i:{i}*****");}return Content("发送成功");}
}

第三步&#xff1a;搭建订阅者Angel.Cap.Subscriber


  1. 添加数据库连接字符串&#xff0c;与发布者一样
  2. 添加DBContext

public class SubDBContext : DbContext
{public SubDBContext(){}public SubDBContext(DbContextOptions<SubDBContext> options) : base(options){}protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){base.OnConfiguring(optionsBuilder);}
}

  1. Configure和ConfigureServices使用


public void ConfigureServices(IServiceCollection services)
{services.AddControllersWithViews();//注入数据库services.AddDbContext<SubDBContext>(options &#61;> options.UseSqlServer(Configuration["ConnectionStrings:AngelDBContext"]));//注册cap事件services.AddCap(x &#61;>{x.UseEntityFramework<SubDBContext>();x.UseRabbitMQ(rb &#61;>{rb.HostName &#61; "localhost";rb.UserName &#61; "admin";rb.Password &#61; "admin";rb.Port &#61; 5672;rb.VirtualHost &#61; "Angel2022";rb.ExchangeName &#61; "AngelCapExchange";rb.QueueMessageExpires &#61; 24 * 3600 * 10; //队列中消息自动删除时间(默认10天)});});}public void Configure(IApplicationBuilder app, IWebHostEnvironment env, SubDBContext efCoreApp)
{if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseExceptionHandler("/Home/Error");// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.app.UseHsts();}app.UseHttpsRedirection();app.UseStaticFiles();app.UseRouting();efCoreApp.Database.EnsureCreated();//数据库不存在自动创建app.UseAuthorization();app.UseEndpoints(endpoints &#61;>{endpoints.MapControllerRoute(name: "default",pattern: "{controller&#61;Home}/{action&#61;Index}/{id?}");});
}

  1. 创建订阅者接口

[Route("api/[controller]/[action]")]
[ApiController]
public class SubController : ControllerBase
{private ILogger _log;public SubController(ILogger<SubController> log){this._log &#61; log;}///

/// 订阅者的方法/// /// [NonAction][CapSubscribe("angel")]public void ReceiveMsg(string str){_log.LogInformation($"我是订阅者,收到的内容为&#xff1a;{str}");}
}

Cap 面板

在Angel.Cap.Subscriber上使用面板


  1. 在ConfigureServices的AddCap上调用UseDashboard()

//注册cap事件
services.AddCap(x &#61;>
{x.UseEntityFramework<SubDBContext>();x.UseRabbitMQ(rb &#61;>{rb.HostName &#61; "localhost";rb.UserName &#61; "admin";rb.Password &#61; "admin";rb.Port &#61; 5672;rb.VirtualHost &#61; "Angel2022";rb.ExchangeName &#61; "Angel_RabbMQ_Exchange";rb.QueueMessageExpires &#61; 24 * 3600 * 10; });x.UseDashboard();//使用Cap可视化面板
});

  1. 浏览器打开&#xff0c;域名后面加上cap
    https://localhost:44368/cap
    11

推荐阅读
  • Go语言实现Redis客户端与服务器的交互机制深入解析
    在前文对Godis v1.0版本的基础功能进行了详细介绍后,本文将重点探讨如何实现客户端与服务器之间的交互机制。通过具体代码实现,使客户端与服务器能够顺利通信,赋予项目实际运行的能力。本文将详细解析Go语言在实现这一过程中的关键技术和实现细节,帮助读者深入了解Redis客户端与服务器的交互原理。 ... [详细]
  • 成功实现Asp.Net MVC3网站与MongoDB数据库的高效集成
    我们成功地构建了一个基于Asp.NET MVC3框架的网站,并实现了与MongoDB数据库的高效集成。此次更新不仅完善了基本的创建和显示功能,还全面实现了数据的增删改查操作。在创建功能方面,我们修复了之前代码中的错误,确保每个属性都能正确生成。此外,我们还对数据模型进行了优化,以提高系统的性能和稳定性。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 本文将介绍一种扩展的ASP.NET MVC三层架构框架,并通过使用StructureMap实现依赖注入,以降低代码间的耦合度。该方法不仅能够提高代码的可维护性和可测试性,还能增强系统的灵活性和扩展性。通过具体实践案例,详细阐述了如何在实际开发中有效应用这一技术。 ... [详细]
  • 优化后的标题:数据网格视图(DataGridView)在应用程序中的高效应用与优化策略
    在应用程序中,数据网格视图(DataGridView)的高效应用与优化策略至关重要。本文探讨了多种优化方法,包括但不限于:1)通过合理的数据绑定提升性能;2)利用虚拟模式处理大量数据,减少内存占用;3)在格式化单元格内容时,推荐使用CellParsing事件,以确保数据的准确性和一致性。此外,还介绍了如何通过自定义列类型和优化渲染过程,进一步提升用户体验和系统响应速度。 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • 在运行时动态获取Entity Framework中的ObjectSet可以通过反射机制实现。这种方法允许开发者在应用程序运行期间根据需要加载不同的实体集合,从而提高代码的灵活性和可扩展性。通过使用`DbContext`类的`Set`方法,结合类型信息,可以轻松地实现这一目标。此外,还可以利用`Type`对象和泛型方法来进一步增强动态性,确保在处理多种实体类型时更加高效和安全。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 深入解析JWT的实现与应用
    本文深入探讨了JSON Web Token (JWT) 的实现机制及其应用场景。JWT 是一种基于 RFC 7519 标准的开放性认证协议,用于在各方之间安全地传输信息。文章详细分析了 JWT 的结构、生成和验证过程,并讨论了其在现代 Web 应用中的实际应用案例,为开发者提供了全面的理解和实践指导。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • 在Linux环境下编译安装Heartbeat时,常遇到依赖库缺失的问题。为确保顺利安装,建议预先通过yum安装必要的开发库,如glib2-devel、libtool-ltdl-devel、net-snmp-devel、bzip2-devel和ncurses-devel等。这些库是编译过程中不可或缺的组件,能够有效避免编译错误,确保Heartbeat的稳定运行。 ... [详细]
  • 本文探讨了在Lumen框架中实现自定义表单验证功能的方法与挑战。Lumen的表单验证机制默认返回无状态的JSON格式API响应,这给初学者带来了一定的难度。通过深入研究Validate类,作者分享了如何有效配置和使用自定义验证规则,以提升表单数据的准确性和安全性。 ... [详细]
  • MVVM架构~mvc,mvp,mvvm大话开篇
    返回目录百度百科的定义:MVP是从经典的模式MVC演变而来,它们的基本思想有相通的地方:ControllerPresenter负责逻辑的处理,Model提供数据,View负责显示。作为一种新的模 ... [详细]
  • 在使用sbt构建项目时,遇到了“对象apache不是org软件包的成员”的错误。本文详细分析了该问题的原因,并提供了有效的解决方案,包括检查依赖配置、清理缓存和更新sbt插件等步骤,帮助开发者快速解决问题。 ... [详细]
author-avatar
哲亚Zoe
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有