随笔- 102  文章- 3  评论- 476 

发布订阅 - 基于A2DFramework的事件机制实现

 

SUMMARY

  • 能做什么
  • DEMO
  • 原理图
  • 应用场景

能做什么

A2DFramework的事件机制是基于发布订阅模式改进得来的一套API,中间件部分实现了msmq、redis、Supersocket可替换。能够实现较彻底的模块事件传递过程中的解耦,支持分布式环境。由于订阅端采用了消息队列作为转发层,因此也能支持事件量很大的场景。

DEMO

Demo工程下载地址(可右键保存):

发布订阅Demo.rar

一、建立各个工程,并且加入A2DFramework.EventService的引用

二、给各个工程加入A2D基本代码,如下:

A2DFramework.Starter.Init();
A2DFramework.QueueService.Starter.Init();
A2DFramework.EventService.Starter.Init();

三、加入A2D.config文件以及相应的配置(事件机制用到了队列框架)

<?xml version="1.0" encoding="utf-8" ?>
<A2D>
<QueueSetting QueueType="MSMQ"><!--Redis-->
<MSMQ><!-- 根据QueueType类型,此节点可省略 -->
<AutoDeleteNetworkFile>true</AutoDeleteNetworkFile>
<QueueConnectionStringFormat>server1\private$\A2D_订阅者2_{0}</QueueConnectionStringFormat>
<NetworkLocation>msmq</NetworkLocation>
<MaxQueueBodyLength>3670016</MaxQueueBodyLength>
</MSMQ>
<Redis><!-- 根据QueueType类型,此节点可省略 -->
<ReadWriteServerIps>192.168.1.1</ReadWriteServerIps>
<ReadOnlyServerIps>192.168.1.1</ReadOnlyServerIps>
<MaxReadPoolSize>1000</MaxReadPoolSize>
<MaxWritePoolSize>1000</MaxWritePoolSize>
<QueueNameFormat>A2D_{0}1</QueueNameFormat>
</Redis>
</QueueSetting>
<ShareFileSetting>
<NetworkShareRoot>\\server1\share\msmq</NetworkShareRoot>
</ShareFileSetting>
<EventSetting EventBusType="Redis"><!--SuperSocket/Redis/Local-->
<SuperSocket><!-- 可选 -->
<Identifier>app server name 3</Identifier><!--客户端的名称,需要发往event server-->
<Address>192.168.4.191</Address>
<Port>2012</Port>
<RetryConnectInterval>1000</RetryConnectInterval>
</SuperSocket>
<Redis><!-- 可选 -->
<Identifier>app server name 1</Identifier>
<ReadWriteServerIps>192.168.4.191</ReadWriteServerIps>
<ReadOnlyServerIps>192.168.4.191</ReadOnlyServerIps>
<MaxReadPoolSize>1000</MaxReadPoolSize>
<MaxWritePoolSize>1000</MaxWritePoolSize>
</Redis>
<Local><!-- 可选 --> </Local>
<EventMapping><!-- Event节点可以有多个 -->
<Event Event="Events.OrderCreated" EventFullType="Events.OrderCreated, Events">订阅者2.OrderCreatedEventHandlerProcessor, 订阅者2</Event>
<!--

Event属性:事件Type全路径

EventFullType属性:事件Type全路径+dll名

节点value:关联的事件处理函数类+dll名

-->

      </EventMapping>
</EventSetting>
</A2D>

四、定义事件(可自定义)

public class OrderCreated : IEvent   //A2DFramework.EventService.IEvent
{
/// <summary>
/// 新订单ID
/// </summary>
public Guid NewOrderID { get; set; } /// <summary>
/// 下单时间
/// </summary>
public DateTime OrderTime { get; set; }
}

五、在订阅者中定义事件处理函数:

public class OrderCreatedEventHandlerProcessor : IProcessReceivedEventProcessorHandler<OrderCreated>
{
public void Process(OrderCreated evt)
{
Console.WriteLine("订阅者1 接收到了OrderCreated事件,NewOrderID: " + evt.NewOrderID);
}
}

六、运行效果图:

原理图

应用场景

  • 将重载荷通过事件分发到专门处理的服务器来处理,比如生成pdf、生成报表数据等
  • 能保持前端轻,响应速度快

  • 模块解耦、面向模块编程

自省推动进步,视野决定未来。
心怀远大理想。
为了家庭幸福而努力。
A2D科技,服务社会。
A2D Framework(Alpha)

  • 1. Cache System(本地缓存与分布式缓存共存、支持Memcache和Redis、支持贴标签形式(类似Spring 3.x的Cache形式))
  • 2. Event System(本地事件与分布式事件分发)
  • 3. IoC(自动匹配功能,实例数量限制功能)
  • 4. Sql Dispatcher System(支持ADO.NET及EF)
  • 5. Session System(分布式Session系统)
  • 6. 分布式Command Bus(MSMQ实现,解决4M限制,支持Session的读取)
  • 7. 规则引擎

QQ群:283016070,真材实料的.NET架构师

 

基于A2DFramework的事件机制实现的更多相关文章

  1. 发布订阅 - 基于A2DFramework的事件机制实现

    SUMMARY 能做什么 DEMO 原理图 应用场景 能做什么 A2DFramework的事件机制是基于发布订阅模式改进得来的一套API,中间件部分实现了msmq.redis.Supersocket可 ...

  2. 【React】354- 一文吃透 React 事件机制原理

    大纲 主要分为4大块儿,主要是结合源码对 react事件机制的原理 进行分析,希望可以让你对 react事件机制有更清晰的认识和理解. 当然肯定会存在一些表述不清或者理解不够标准的地方,还请各位大神. ...

  3. spring的事件机制实战

    理论 在分布式场景下,实现同步转异步的方式有三种方式: 1.异步线程池执行:比如借助@Asyn注解,放到spring自带的线程池中去执行: 2.放到消息队列中,在消费者的代码中异步的消费,执行相关的逻 ...

  4. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

  5. Node.js入门:事件机制

    Evented I/O for V8 JavaScript     基于V8引擎实现的事件驱动IO.   事件机制的实现     Node.js中大部分的模块,都继承自Event模块(http://n ...

  6. Android事件机制之一:事件传递和消费

    http://www.cnblogs.com/lwbqqyumidi/p/3500997.html 关于Android中的事件机制,用到的地方还是很多的,并且这个知识点还真有点复杂. 在写这篇文章前, ...

  7. U3D C# 实现AS3事件机制

    写了很多年的AS3,最近接触U3D感觉事件机制没AS3的爽.咬紧牙关一鼓作气 基于C# 的委托实现了一版.废话不多说上干货. EventDispatcher代码如下: using UnityEngin ...

  8. AS3事件机制概述

    事件机制是AS3的核心功能之一,没有充分掌握事件机制的方方面面,就不能算是精通AS3语言. 1. AS3事件机制的主要成员 IEventDispatcher:事件派发对象接口,定义了添加.派发.移除. ...

  9. 百度地图API详解之事件机制,function“闭包”解决for循环和监听器冲突的问题:

    原文:百度地图API详解之事件机制,function"闭包"解决for循环和监听器冲突的问题: 百度地图API详解之事件机制 2011年07月26日 星期二 下午 04:06 和D ...

随机推荐

  1. Ubuntu 14.1 构造NFS

    主办IP:129.1.4.189.目标计算机IP:129.1.22.96 1.运行命令:apt-get install nfs-kernel-server ; 2.运行命令:mkdir /tftpbo ...

  2. gets、scanf和getchar之间的区别

    gets gets.scanf和getchar之间的区别 1. gets函数读取数据时,接受的数据包括数据和回车符.即:读取数据后输入流没有输入 操作动作. 2. scanf函数读取数据时,接受的数据 ...

  3. C#快递跟踪(基于快递100深度定制)

    本文主要介绍快递跟踪的相关信息.如根据快递单号预测所属快递公司,判断快递是否已被签收,以及改良官方model后可在不用申请授权的情况下实现json,html,xml及text等多种格式以及单行多行,降 ...

  4. java_Eclipse主题颜色配置+全屏

    http://www.eclipsecolorthemes.org/ 这个是主题的网站. 在Eclipse里, File->Import->General->Preferences- ...

  5. 源码安装saltstack的时候遇到的问题

    公司的系统都是内网,无法连接互联网,所以没办法只有源码安装了. 看了下saltstack的官网,需要安装的包有 https://docs.saltstack.com/en/latest/topics/ ...

  6. javascript实现数据结构:广义表

    原文:javascript实现数据结构:广义表  广义表是线性表的推广.广泛用于人工智能的表处理语言Lisp,把广义表作为基本的数据结构. 广义表一般记作: LS = (a1, a2, ..., an ...

  7. 《java系统性能调优》--1.发现瓶颈

    性能啊!性能! 之所以想写写性能调优,也是有感于我们的项目,我们採用一些手段使得系统性能上升了一个台阶,总是须要把这点经验沉淀一下.随着工作的深入,关于系统性能的事肯定还有非常多,也算是通过这个系列文 ...

  8. Asp.net MVC + EF + Spring.Net 项目实践(目录)

    用4篇博客来搭一个MVC的框架,可能对初学者会有一些帮助,大家共勉吧.我觉得对于中小型项目,这个框架可能还是有一定的用处的,希望能够帮助到一些人. Asp.net MVC + EF + Spring. ...

  9. 客户端程序通过TCP通信传送"小文件"到服务器

    客户端程序通过TCP通信传送"小文件"到服务器 [c#源码分享]客户端程序通过TCP通信传送"小文件"到服务器 源码  (不包含通信框架源码,通信框架源码请另行 ...

  10. [SQLXML]FOR XML语法导出XML的易错之处

    原文:[SQLXML]FOR XML语法导出XML的易错之处 [SQLXML]FOR XML语法导出XML的易错之处 Version Date Creator Description 1.0.0.1 ...