.NET Core开发实战(第33课:集成事件:使用RabbitMQ来实现EventBus)--学习笔记(下)...

33 | 集成事件:使用RabbitMQ来实现EventBus

为了演示我们的发布和订阅的话,我们在这里的代码做一些稍微的调整

namespace GeekTime.API.Application.DomainEventHandlers
{public class OrderCreatedDomainEventHandler : IDomainEventHandler<OrderCreatedDomainEvent>{ICapPublisher _capPublisher;public OrderCreatedDomainEventHandler(ICapPublisher capPublisher){_capPublisher = capPublisher;}public async Task Handle(OrderCreatedDomainEvent notification, CancellationToken cancellationToken){await _capPublisher.PublishAsync("OrderCreated", new OrderCreatedIntegrationEvent(notification.Order.Id));}}
}

这里我们发布了一个 OrderCreated 的集成事件,然后订阅一个 OrderCreated

namespace GeekTime.API.Application.IntegrationEvents
{public class SubscriberService : ISubscriberService, ICapSubscribe{IMediator _mediator;public SubscriberService(IMediator mediator){_mediator = mediator;}[CapSubscribe("OrderPaymentSucceeded")]public void OrderPaymentSucceeded(OrderPaymentSucceededIntegrationEvent @event){//Do SomeThing}[CapSubscribe("OrderCreated")]public void OrderCreated(OrderCreatedIntegrationEvent @event){//Do SomeThing}}
}

通过标注属性,我们就可以完成订阅

也就是说我们创建一个订单的时,我们会触发订单创建的领域事件,订单创建的领域事件又发送了一个订单创建的集成事件,然后我们在订阅服务里面订阅了订单创建的集成事件

在发布和订阅的地方分别打上一个断点,启动程序,可以看到整个流程

我们再梳理一下整个流程,首先我们创建了一个订单,这个订单触发了我们的 OrderCreated 的领域事件,OrderCreated 的领域事件的处理器像我们的 EventBus 发布了一个 OrderCreated 的集成事件,我们在订阅服务的地方订阅了这个事件,所以我们可以接收到并且做出相应的处理

我们观察一下数据库的表,一共有四张表,cap.publish 和 cap.received 这两张表分别对应发送事件表和接收事件表,order 和 user 这两张表是我们的领域模型表

整个 CAP 的框架,它的实现原理其实有两个关键点,一个是事件表,一个就是事务控制,也就是说将事件的存储嵌入到我们的业务逻辑的事务里面去,这样子我们就可以保证我们的业务与事件是要么都能存储成功,要么都失败

整个 CAP 框架它的应用性是非常强的,非常建议在处理集成事件的时候使用这个框架

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310861.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文本框赋值guide matlab,科学网-Matlab: 学习GUI (使用GUIDE时需注意的几个问题)-刘磊的博文...

在博文《Matlab&#xff1a;学习GUI(一个简单的例子)》(介绍的方法是完全用代码来建立一个GUI&#xff0c;实际上Matlab本身有一个设计GUI的交互系统——GUIDE&#xff0c;用户可以使用该系统更方便的建立自己的GUI.本文将介绍使用GUIDE时常常遇到的几个问题。本文将通过一个简…

洛谷 P1294 高手去散步-邻接矩阵+dfs-求无向图的一条最长路径

输入: 4 6 1 2 10 2 3 20 3 4 30 4 1 40 1 3 50 2 4 60输出: 150邻接矩阵&#xff1a; 代码如下: #include <iostream> using namespace std;int ans -1; const int N 25; int mp[N][N]; bool vis[N]; int n, m; void dfs(int u, int sum) {ans max(ans, sum);for …

论ORM框架—EntityFrameworkCore

欢迎大家阅读《朝夕Net社区技术专刊》我们致力于.NetCore的推广和落地&#xff0c;为更好的帮助大家学习&#xff0c;方便分享干货&#xff0c;特创此刊&#xff01;很高兴你能成为忠实读者&#xff0c;文末福利不要错过哦&#xff01;01PARTORM框架ORM&#xff08;Object Rela…

数字和为sum的方法数-01背包计数问题

给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。 当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。 输入描述: 输入为两行: 第一行为两个正整数n(1 ≤ n ≤ 1000)&#xff0c;sum(1 ≤ sum ≤ 1000) 第二行为n个正整数Ai…

Oracle多租户体系,Oracle12C 多租户管理

--进入cdbsqlplus /nologconn sys/sys as dba--查看数据库基本信息select name,cdb from v$database;--查看容器的相关信息select con_id,name from v$containers;--查看数据文件的路径select con_id,file_name from cdb_data_files order by 1;--显示当前连接容器信息show con…

苏老师首播3小时!超500人观看!录屏!源码!PPT……你要的都在这里!

点击视频 ☝ 回顾直播现场2020年3月25日晚18&#xff1a;30&#xff0c;“盛派周三分享”首次直播交流会&#xff0c;由盛派技术团队带头人Jeffrey&#xff0c;苏震威老师主持、分享&#xff0c;主题是《SCF 框架介绍快速创建项目演示》。此次直播历时3个多小时&#xff0c;500…

oracle错误 904,ORACLE 导出错误 EXP-00008: 遇到 Oracle 错误 904

案例情景——在一次C:\Documents and Settings\Administrator>explsxy/lsxylsxy_dbfileE:\lsxy.dmp ownerlsxyExport:Release 11.2.0.1.0- Production on 星期一 11月 26 14:07:18 2012 Copyright (c) 1982,2009,Oracle and/or its affiliates. All rights reserved.连接到:…

[蓝桥杯][算法提高VIP]数的划分-dp

题目描述 一个正整数可以划分为多个正整数的和&#xff0c;比如n3时&#xff1a; 3&#xff1b;1&#xff0b;2&#xff1b;1&#xff0b;1&#xff0b;1&#xff1b; 共有三种划分方法。 给出一个正整数&#xff0c;问有多少种划分方法。 输入 一个正整数n 数据规模和约定 …

十问十答 GPL 许可证

GPL 是 GNUs General Public License 的缩写&#xff0c;翻译成中文叫 GNU 的通用公共许可证&#xff0c;是最受欢迎的开源许可证之一。它由理查德斯托曼&#xff08;Richard Stallman&#xff09;创建&#xff0c;目的是保护 GNU 软件免于被专有&#xff0c;是基于他「版权向左…

oracle consistent gets,oracle构建一致性读

对于实际的业务系统&#xff0c;通常有一些热点的表&#xff0c;insert和delete的量非常大&#xff0c;这个时候就会发现一些查询语句的逻辑读比较偏高&#xff0c;这时可能就是oracle在构建一致性块的进行的consistentread。下面做一个测试看下&#xff1a;第一步准备数据&…

[蓝桥杯][算法提高VIP]聪明的美食家-dp

题目描述 如果有人认为吃东西只需要嘴巴&#xff0c;那就错了。 都知道舌头有这么一个特性&#xff0c;“由简入奢易&#xff0c;由奢如简难”&#xff08;据好事者考究&#xff0c;此规律也适合许多其他情况&#xff09;。具体而言&#xff0c;如果是甜食&#xff0c;当你吃的…

解析“60k”大佬的19道C#面试题(上)

解析“60k”大佬的19道C#面试题&#xff08;上&#xff09;先略看题目&#xff1a;请简述 async函数的编译方式请简述 Task状态机的实现和工作机制请简述 await的作用和原理&#xff0c;并说明和 GetResult()有什么区别Task和 Thread有区别吗&#xff1f;如果有请简述区别简述 …

oracle秘钥到期,Oracle – 更新加入 – 非密钥保留表

我试图复制一个Ingres“tbl2”中的更新tbl1命令,这在Oracle中并不完全.所以我使用“update(select tbl1 join tbl2 …)”命令.两个表都定义了主键,我认为我的连接唯一标识行,但是我仍然得到“ORA-01779&#xff1a;不能修改映射到非密钥保留表的列”.这里是适当的匿名表定义和我…

dptcpp 题目 2352: [信息学奥赛一本通-T1440]数的划分-dp

题目描述 将整数n分成k份&#xff0c;且每份不能为空&#xff0c;任意两份不能相同(不考虑顺序)。 例如&#xff1a;n7&#xff0c;k3&#xff0c;下面三种分法被认为是相同的。 {1&#xff0c;1&#xff0c;5}&#xff1b;{1&#xff0c;5&#xff0c;1}&#xff1b;{5&…

通过极简模拟框架让你了解ASP.NET Core MVC框架的设计与实现[上篇]

《200行代码&#xff0c;7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有了真实的了解。在过去很长一段时间中&#xff0c;有很多人私信给我&#xff1a;能否按照相同的方式分析一下MVC框架的设计与实现原理&#xff0c;希望这篇文章能够满足你们的…

linux rsync删文件速度,Linux下使用rsync最快速删除大量文件的方法

要在Linux下删除海量文件的情况&#xff0c;需要删除三层哈希目录下的几十万个文件。这个时候&#xff0c;删除命令rm -rf * 就不好用了&#xff0c;因为要等待的时间太长。所以必须要采取一些非常手段。我们可以使用rsync来实现快速删除大量文件。安装步骤&#xff1a;1、先安…

[蓝桥杯][算法提高VIP]摆花-多重背包计数问题

题目描述 小明的花店新开张&#xff0c;为了吸引顾客&#xff0c;他想在花店的门口摆上一排花&#xff0c;共m盆。通过调查顾客的喜好&#xff0c;小明列出了顾客最喜欢的n种花&#xff0c;从1到n标号。为了在门口展出更多种花&#xff0c;规定第i种花不能超过ai盆&#xff0c;…

通过极简模拟框架让你了解ASP.NET Core MVC框架的设计与实现[中篇]:请求响应

《200行代码&#xff0c;7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有了真实的了解。在过去很长一段时间中&#xff0c;有很多人私信给我&#xff1a;能否按照相同的方式分析一下MVC框架的设计与实现原理&#xff0c;希望这篇文章能够满足你们的…

linux strcpy函数实现,strcpy(char *dest , char *src)的漏洞

前言&#xff1a;研究了几天DOS下的溢出原理&#xff0c;最后明白了其实原理都很简单关键是要懂得为什么C语言的strcpy函数有漏洞&#xff0c;为什么对这个函数的不正常使用会造成溢出。一节&#xff1a;介绍strcpy函数能看到这篇文章的人可能都知道问题很多是出在它的身上吧呵…

洛谷 P2853 [USACO06DEC]Cow Picnic S-dfs

输入: 2 4 4 2 3 1 2 1 4 2 3 3 4输出: 2代码如下: #include <iostream> #include <vector> #include <cstring> using namespace std; const int N 1010; bool vis[N]; vector<int>v[N]; int r[N]; int mk[N];void dfs(int u) {mk[u];for (int i …