Masstransit 是一个非常优秀的基于消息进行通信的分布式应用程序框架,详情参考官网。

在介绍AA.ServiceBus之前,先介绍下几个概念.

分布式

分布式系统如何定义?这里引用一下Distributed Systems Concepts and Design(Third Edition)中的一句话:"A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messages"(分布式系统是指位于联网计算机上的组件仅通过传递消息来通信和协调其操作的系统)。从这句话里面我们可以看到几个重点:
1、组件分布在网络计算机上
2、组件之间仅仅通过消息传递来通信并协调行动
严格讲,同一个分布式系统中的计算机在空间部署上是可以随意分布的,这些计算机可能被放在不同的机柜上,也可能在不同的机房中,甚至分布在不同的城市。

中间件

中间件是介于操作系统和在其上运行的应用程序之间的软件。中间件实质上充当隐藏转换层,实现了分布式应用程序的通信和数据管理。它有时被称为管道,因为它将两个应用程序连接在一起,使数据和数据库可在“管道”间轻松传递。参考Azure

常见的中间件比如:远程过程调用中间件,消息中间件,数据库访问中间。

消息中间件

Message-oriented middleware (MOM) is software or hardware infrastructure supporting sending and receiving messages between distributed systems.

面向消息的中间件(MOM)是支持在分布式系统之间发送和接收消息的软件或硬件基础设施

AA.ServiceBus 介绍

AA.ServiceBus 是基于MassTransit的消息中间件,提供点对点和发布订阅的通信方式。这两个之间的区别:

  • 端点对端点通信 该消息仅处理一次 并且被一个消费者处理。

例如命名模式 命令告诉服务做某事,推荐动词-名词顺序的命名风格:如提交订单命令(SubmitOrder)

  • 发布订阅通信 可以被多个订阅者进行消费处理。

例如事件驱动模式 事件意味着某事已经发生了,推荐以名词-动词(过去时态)顺序的命名风格,表明发生了某事。示例订单提交过了事件 OrderSubmitted

目前实现消息中间件有多种方式,参考微服务.NET:容器化应用架构指南 如图

AA.ServiceBus 快速开始

实例我们创建两个控制台程序生产者、消费者分别命名ServiceBus.Producers、ServiceBus.Consumers,然后在创建一个消息契约类库命名为ServiceBus.MsgContract ,分别被生产者和消费者引用。

1.在消息契约类库中创建两个消息 分别是 提交订单 SubmitOrder 和 订单已提交OrderSubmitted代码如下

2.在生产者控制台项目中安装Install-Package AA.ServiceBus -Version 1.0.0,生产者主要对消息的构造然后进行发送或发布;

3.在消费者控制台项目中安装Install-Package AA.ServiceBus -Version 1.0.0,生产者需要创建对应的消费者进行处理消息,只需要继承IConsumer接口即可

运行消费者和生产者控制台 输出如下:

原文:https://www.cnblogs.com/chengtian/p/11239216.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

基于Masstransit实现Eventbus的功能相关推荐

  1. 基于 MongoDB 的 python 日志功能

    本文首发于 Gevin的博客 原文链接:基于MongoDB的python日志功能 未经 Gevin 授权,禁止转载 基于MongoDB的python日志功能 why-log-to-mongodb 我几 ...

  2. python程序实例电话本-Python基于递归实现电话号码映射功能示例

    本文实例讲述了Python基于递归实现电话号码映射功能.分享给大家供大家参考,具体如下: 问题 电话按键上面的每个数字都对应着几个字母,如果按下一个数字键代表输入一个字母,那么输入一个数字组成的字符串 ...

  3. 递归二分法php,PHP基于二分法实现数组查找功能示例【循环与递归算法】

    本文实例讲述了PHP基于二分法实现数组查找功能.分享给大家供大家参考,具体如下: 二分法.分别使用while循环的方法和递归调用的方法. // 二分法的使用数组必须是有序的,或升序,或降序 $arr ...

  4. mysql sqlite 分页查询_php基于SQLite实现的分页功能示例

    本文实例讲述了php基于SQLite实现的分页功能.分享给大家供大家参考,具体如下: 这里操作数据库文件使用的是前面文章<PHP基于PDO实现的SQLite操作类[包含增删改查及事务等操作]&g ...

  5. SAP UI5 应用开发教程之三十四 - SAP UI5 应用基于设备类型的页面适配功能(Device Adaptation)试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  6. 动手造轮子:基于 Redis 实现 EventBus

    动手造轮子:基于 Redis 实现 EventBus Intro 上次我们造了一个简单的基于内存的 EventBus,但是如果要跨系统的话就不合适了,所以有了这篇基于 Redis 的 EventBus ...

  7. php 调用日历控制,基于ThinkPHP实现的日历功能实例详解

    本文实例讲述了基于ThinkPHP实现的日历功能.分享给大家供大家参考,具体如下: 开发环境介绍 最新,闲来没事,便开发了一款简单的日历,来统计工作情况.为了开发便捷,使用ThinkPHP架构.界面如 ...

  8. (29)基于FPGA实现看门狗功能(FPGA不积跬步101)

    1 引言  微处理(ARM.单片机)在特殊的环境下,运行代码或程序会跑到非预期状态,也就是说系统可能会进入死循环,这种情况微处理器无法进行自我恢复,只能通过复位或者重启进行解决.看门狗就是解决这种情况 ...

  9. 基于FPGA实现PCIE IP功能仿真

    基于FPGA实现PCIE IP功能仿真 1 开发工具 modelsim simulator或vivado simulator,本设计采用modelsim进行仿真. 2 参数配置

最新文章

  1. 柔宇冲刺科创板IPO:3年营收5亿净亏31亿,乐视掘墓人刘姝威坐镇董事会
  2. 手电筒android studio,Android Studio:手电筒关闭时崩溃
  3. WCF和ASP.NET Web API在应用上的选择
  4. flask 实现异步非阻塞----gevent
  5. 为什么jupyterlab运行程序的时候会自动停止_气象人的JupyterLab
  6. 92. 反转链表 II golang
  7. mysql安装innodb插件
  8. .net get set 初始化_.NET项目升级:可为空引用
  9. tigervnc远程控制linux,CentOS 6.8 安装TigerVNC 实现 Linux 远程桌面
  10. ======第一章总结及习题======
  11. 基于模板的通用代码生成器LKGenerator(四)-核心技术之各种数据库查询表信息sql整理...
  12. Qt_17行代码 QString英文字符串转16进制显示
  13. 嵌入式linux应用开发之常用shell脚本总结
  14. 网站制作笔记一域名购买与主机备案
  15. 小布语音下载安装_oppo语音助手小布小冰安装包app
  16. PHP预处理器的配置文件名为,2)PHP预处理器配置文件名是什么?
  17. 登录mysql报错Failed to connect to backoff 或 Failed to get D-Bus connection: Operation not permitted解决方法
  18. 重庆大学计算机学院马前,以梦为马,以论为矛
  19. [UVM] include_coverage not located message
  20. 微软提供正确卸载IE7的方法并恢复IE6

热门文章

  1. vista任务栏透明_在Windows XP中获取Vista任务栏缩略图预览
  2. ipad和iphone切图_如何从iPhone和iPad上的Mail应用程序删除电子邮件帐户
  3. 项目中的模块剥离成项目_使用MCEBuddy 2从电视录制中剥离广告
  4. zuul转发的一些常见异常
  5. 【转】学习apicloud和IOS之间的模块化使用
  6. Android STL PORT
  7. 归档日志 delete input 和delete all input 区别
  8. 管理Apache服务器访问日志
  9. 欢迎与我一起交流安全管理平台
  10. getopt()简介