发布订阅 - 基于A2DFramework的事件机制实现
2014-03-18 21:39
330 查看
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、生成报表数据等能保持前端轻,响应速度快
模块解耦、面向模块编程
相关文章推荐
- 如何利用callback机制开发基于WCF的事件发布/订阅系统
- 基于A2DFramework的事件机制实现
- 基于EventAggregator的事件发布及订阅
- Thrift 个人实战--RPC服务的发布订阅实现(基于Zookeeper服务)
- 基于事件分发机制,以最小代价实现listview顶部悬浮效果
- redis订阅发布机制实现分布式锁
- 基于.Net的发布订阅模式API的实现与详解(一)
- Unity教程之-Unity3d中基于订阅者模式实现事件机制
- Redis Pub发布/sub订阅实现机制
- 【插件式框架探索系列】建立基于委托的订阅发布机制
- React-Native傻瓜式学习笔记(三):基于事件发布/订阅的网络请求工具类封装
- linux下使用hiredis异步API实现sub/pub消息订阅和发布的功能 标签: hiredishiredis异步APIhiredis事件处理redis消息订阅发布redis c接口 2016-
- 基于PHP实现的事件机制实例分析
- 在Unity3D中基于订阅者模式实现事件机制
- 利用Thrift和zk简单实现服务治理框架中的订阅发布机制
- 基于spring-redis发布订阅模式的实现
- 基于事件的监听,消息订阅设计模式的实现框架,ERP,OA,复杂,灵活多变的项目的福音
- 基于监听的事件处理机制-----五种onClickListener实现方法
- .NET消息发布和订阅机制的实现案例
- 基于JS原生的事件订阅和发布模式代码