C#版企业总线(ESB)设计说明书
从开源的ESB项目,基本上都是java版本,c#的esb开源项目太少,这对搞c#来说是一大遗憾,所以本人很想对c#开源世界做一份小小的贡献,因些开始写一版真正开源的ESB企业开发框架。园子里有兴趣的园友也可以一起来做。
1,ESB 架构图
2,ESB 系统架构要求
.Net 4.0 Framework
处理器要求: 最少1 GHz or faster
内存要求: 最少2 GB RAM
服务器需要打开的端口:
Redis 服务端口 : 6379~6384
router and gateway service 端口:8000, 8085, and 8084
websocket 端口:8081
3,ESB 配置
负载配置说明 (LoadBalance)
4,ESB 功能说明
(1) 实现集成权限认证提供安全管理
(2) 支持数据交换方式有 :
WCF(NetTcp),MSSQL,WP7,MSMQ,RabbitMQ,Redis,TCP,WebService,Http,Email 等
(3) 可插拔的接口
(4) 提供简单 API 访问 ESB
(5) 开发者可以通过 Javascript API 与 ESB 交互
(6) 提供 REST 服务与 ESB 进行交互
5,ESB 测试结果
测试机器
Intel Core 2 Quad Q9000 @2.00GHZ 6GB RAM x64bit
压力测试结果: StressRequest - Result
Published Message to Bus in 0.2240128 Second(s)
Finished processing(publishing/receiving) 1000 in 0 second(s)
Published Message to Bus in 2.0591178 Second(s)
Finished processing(publishing/receiving) 10000 in 2.4851422 second(s)
Published Message to Bus in 22.8293057 Second(s)
Finished processing(publishing/receiving) 100000 in 23.4173394 second(s)
Published Message to Bus in 236.3805202 Second(s)
Finished processing(publishing/receiving) 1000000 in 237.2985727 second(s)
Published Message to Bus in 2440.2385737 Second(s)
Finished processing(publishing/receiving) 10000000 in 2440.4655866 second(s)
6, 序列化方案
MessageShark(Open Source Binary Serializer to replace .Net Binary Formatter)
7, 操作说明
1,首先配置ESB 指向地址总线
(1), 配置负载地址
//Configure router fail-over addresses in cases where multiple router services exists
ESB.AddRouterAddress("tcp://127.0.0.1:8001");
ESB.AddRouterAddress("tcp://127.0.0.1:8002");
(2), 配置默认 ESB 路由结点: localhost:8000/ESBGateway
//Configure default ESB router endpoint to localhost:8000/ESBGateway
ESB.ConfigWithAddress("tcp://127.0.0.1:8000")
2, 设置服务认证安全与权限
为了控制谁连接或者调用到 ESB 服务 , 你需要实现两个接口 :IAuthenticationProvider 和 IAuthorizationProvider
ESB.Authenticate("username", "password");
下面是实现了这两个接口的例子, 这两个引用需要引用 PServiceBus.Core.dll
Public class DefaultAuthenticationProvider:IAuthenticationProvider
{
Public bool Authenticate(string username,string password)
{
// 添加你的验证用户的业务逻辑 : 例如连接数据库或者其它
}
}
public class DefaultAuthorizationProvider : IAuthorizationProvider
{
public bool CanEditSubscriber(string username, string subscriberName)
{
//Do something to verify that user can edit
specified subscriber information
}
}
3, 注册一个新的话题 (topic)
什么是 Topic( 话题 )
一个主题包括名称,描述和参数。主题名称的方法.
Contract Topic : 需要严格参数要求
Open Topic: 发布者可以发布任意参数
Dynamic Topic Creation ( 动态话题创建 )
Topic.New("MyTopic")
.Description("My Topic Description")
.AddParameter("Param1", "Param1 Description")
.AddParameter("Param2", "Param2 Description")
.Register();
Class Based Topic Creation ( 静态话题创建 )
[Description("My topic Description")]
public class MyTopic {
[Description("Param1 Description")]
public string Param1 { get; set; }
[Description("Param2 Description")]
public string Param2 {get; set;}
}
Topic.Register<MyTopic>();
4, 发布一个消息给一个话题 (Topic)
给一个话题发布消息有两个方式 : 你可以发布一个单个的消息,或者你可以发布一个消息集合 , 你要发布一个消息,你要定义这个消息你想发布到哪个话题 , 你可以通过选择是通过名称或者类型 () 来查找话题。
Retrieve Topic object by using the type name as the topic name
var topic = Topic.Select<MyTopic>()
//Retrieve Topic object by using a string based name
var topic = Topic.Select("MyTopic")
发布一个单个消息
There are fours ways to go about publishing a single message.
//Explicitly add the parameter for topic message
topic.SetParameter("Param1", "Value1")
.SetParameter("Param2", "Value2")
.Publish()
//Map an anonymous object or any instance of a class that matches the topic contract
//This option allow you to build up the parameter that would be published from one or more object as needed
topic.Message(new {Param1 = "Value1", Param2 = "Value2"})
.Publish()
//Map with instance of a class
topic.Message(new MyTopic(){ Param1 = "Value1", Param2 = "Value2" })
.Publish();
//Publish using anonymous object
topic.Publish(new {Param1 = "Value1", Param2 = "Value2"})
//Publish using instance of a class
topic.Publish(new MyTopic(){ Param1 = "Value1", Param2 = "Value2" })
//Publish message and infer the specific topic to publish to by using the class name
//This approach does not need the instance of topic object since it is inferring the topic name
Topic.PublishMessage(new MyTopic(){ Param1 = "Value1", Param2 = "Value2"})
给话题发布多个消息体
There are three ways to publish messages in batches
//Publish using a collection of anonymous objects
topic.PublishMany(new List<object>(){
new {Param1 = "Value1", Param2 = "Value2"},
new {Param1 = "Value1", Param2 = "Value2"}
} );
//Publish using a collection of instance of a class
topic.PublishMany(new List<MyTopic>(){
new MyTopic(){ Param1 = "Value1", Param2 = "Value2"},
new MyTopic(){ Param1 = "Value1", Param2 = "Value2"}
});
//Publish by infer the topic name from the type constrain of the collection
Topic.PublishMessages(new List<MyTopic>(){
new MyTopic(){ Param1 = "Value1", Param2 = "Value2"},
new MyTopic(){ Param1 = "Value1", Param2 = "Value2"}
});
6, 获取所有的话题
如果你想知道目前 ESB 中有多少话题 (topics), 可以通过下面的方法来获取 ,ESB 会反回一个集合,包括话题的名称 , 描述,参数。
ESB.GetTopics()
7, 对一个话题进行消费 (subscription)
要开始接收发布给话题的消息,你要配置参数 (filters, transports,topic)
var topicName = "ChatTopic";
var subscriberName = "MySubscriber";
Subscriber.New(subscriberName).Durable(false)
.SubscribeTo(Topic.Select<ChatTopic>().NotEqual("UserName", _userName))
.AddTransport("Tcp", Transport.New<TcpTransport>(
transport => {
transport.Format = TransportFormat.Json;
transport.IPAddress = "127.0.0.1";
transport.Port = port;
}), topicName)
.Save()
以下解释一个每个方法的意思:
Create a new instance of subscriber with the name supplied in the New method
Subscriber.New(subscriberName)
如果消息发送失败,esb 会把失败的消息进行保存,默认情况下,每个消息保存 30 天不过期
subscriber.SubscribeTo(Topic.Select<ChatTopic>().NotEqual("UserName", _userName))
subscriber.AddTransport("Tcp", Transport.New<TcpTransport>(
transport => {
transport.Format = TransportFormat.Json;
transport.IPAddress = "127.0.0.1";
transport.Port = port;
}), topicName)
subscriber.Save()
为一个消费者(subscriber) 在传输协议上添加消息监听
subscriber.OnMessageReceived<ChatTopic>("Tcp", msg => HandleMessage(msg),
interval: TimeSpan.FromMilliseconds(1),
errorAction: h => {
h.Continue = true;
Console.WriteLine(h.Error.ToString());
});
方法解释说明:
8,把消息存储服务更新到数据库中
<add name="default" type="ServiceBus.MessageStores.DefaultMessageStore"
address="Server=.\SQLExpress;Database=servicebus;Trusted_Connection=yes;MultipleActiveResultSets=True"/>
创建数据库,执行下面的SQL 语句
Src\ServiceBus.Data.Entities\Scripts\SentMessageStorage.sql
开源项目:房产,OA,企业电视台 源代码地址: http://www.renrenaj.com/opensouce
分类: ESB , SOA
http://www.cnblogs.com/xuliwen/archive/2012/10/16/2725425.html
随笔分类 -ESB
C#版企业总线(ESB) 2012-10-16 09:29 by xlw, 811 visits, 网摘 , 收藏 , 编辑
摘要: C#版企业总线(ESB)设计说明书 从开源的ESB项目,基本上都是java版本,c#的esb开源项目太少,这对搞c#来说是一大遗憾,所以本人很想对c#开源世界做一份小小的贡献,因些开始写一版真正开源的ESB企业开发框架。园子里有兴趣的园友也可以一起来做。1,ESB架构图2,ESB系统架构要求WindowsServer2003R2WindowsServer2008.Net4.0Framework处理器要求:最少1GHzorfaster内存要求:最少2GBRAM服务器需要打开的端口:Redis服务端口:6379~6384JS,WP7,JavaAPI端口:8078routerandgatewayse 阅读全文
13 Comment Categories: ESB , SOA
构建自己的ESB:ESB原理,构架,实现和应用 2012-10-11 14:07 by xlw, 28 visits, 网摘 , 收藏 , 编辑
摘要: 构建自己的ESB:ESB原理,构架,实现和应用为了改进业务流程,整合企业资源,集成异构应用,提升资产价值,IT业界不断出现的技术趋势,如SOA企业应用集成(EAI),b2b,webservice,ESB吸纳了这些技术的精华,突破传统EAI的专有连接局限,构建了全新的整体架构。ESB是从面向服务架构发展而来的,面向服务架构(soa)是一种定义集成基于服务的软件应用的方法通过服务调用和组合实现业务流程服务是离散的功能单元封装了可重用的业务逻辑,平台独立,位置透明且可互操作,对外提供标准的调用接口ESB是一个松散耦合的,分布式的,事件驱动的企业级SOA一个ESB是预先组装的SOA实现,包含实现SOA 阅读全文
0 Comment Categories: ESB
C# ESB开源项目比较 NServiceBus vs MassTransit vs PEServiceBus 2012-10-09 12:02 by xlw, 43 visits, 网摘 , 收藏 , 编辑
摘要: 因为项目需要,对一些开源的ESB产品做些分析和比较,NServiceBus vs MassTransit vs PEServiceBus 在今后的blog中我会把这几种产品做一个详细的分析和实例比较,可以提供大家参考 NServiceBus说明对比Web服务这几乎不值得的努力,也需要输入。一旦你把“红色药丸”你永远不会看到的世界一样了。对我来说,这是要乌迪的类。去上他的课之前我已经做了十年的使用SOAP和REST的Web服务,我一直运行到同一类型的问题,一遍又一遍。我读过的所有的供应商的最佳实践等等,但一直困扰我的事情是如何与这些“最佳实践”(如果它甚至适当给他们打电话),总是指出我们回到购. 阅读全文
0 Comment Categories: SOA , 架构技术 , ESB随笔分类 -SOA
C#版企业总线(ESB) 2012-10-16 09:29 by xlw, 811 visits, 网摘 , 收藏 , 编辑
摘要: C#版企业总线(ESB)设计说明书 从开源的ESB项目,基本上都是java版本,c#的esb开源项目太少,这对搞c#来说是一大遗憾,所以本人很想对c#开源世界做一份小小的贡献,因些开始写一版真正开源的ESB企业开发框架。园子里有兴趣的园友也可以一起来做。1,ESB架构图2,ESB系统架构要求WindowsServer2003R2WindowsServer2008.Net4.0Framework处理器要求:最少1GHzorfaster内存要求:最少2GBRAM服务器需要打开的端口:Redis服务端口:6379~6384JS,WP7,JavaAPI端口:8078routerandgatewayse 阅读全文
14 Comment Categories: ESB , SOA
C# ESB开源项目比较 NServiceBus vs MassTransit vs PEServiceBus 2012-10-09 12:02 by xlw, 43 visits, 网摘 , 收藏 , 编辑
摘要: 因为项目需要,对一些开源的ESB产品做些分析和比较,NServiceBus vs MassTransit vs PEServiceBus 在今后的blog中我会把这几种产品做一个详细的分析和实例比较,可以提供大家参考 NServiceBus说明对比Web服务这几乎不值得的努力,也需要输入。一旦你把“红色药丸”你永远不会看到的世界一样了。对我来说,这是要乌迪的类。去上他的课之前我已经做了十年的使用SOAP和REST的Web服务,我一直运行到同一类型的问题,一遍又一遍。我读过的所有的供应商的最佳实践等等,但一直困扰我的事情是如何与这些“最佳实践”(如果它甚至适当给他们打电话),总是指出我们回到购. 阅读全文
0 Comment Categories: SOA , 架构技术 , ESB
Erp项目架构完成了 2012-10-09 09:59 by xlw, 33 visits, 网摘 , 收藏 , 编辑
摘要: Erp项目架构完成了,完成了一个SOA 的轻量级ESB架构 阅读全文
0 Comment Categories: SOA , solr开发 , 架构技术
关于Erp 项目之敏捷开发 2012-09-26 14:37 by xlw, 18 visits, 网摘 , 收藏 , 编辑
摘要: Erp项目一般都会包括很多的模块和功能块,如包括OA,HR(人事),CRM,财务,库存,生产,统计 各个环节,对于大多数功能来说,可以细化为表单的操作最近会出一个通用的ERP敏捷框架.... 阅读全文
0 Comment Categories: SOA
ERP项目之 序列化比较Message Shark vs Protobuf vs DataContractSerializer 2012-09-26 10:21 by xlw, 842 visits, 网摘 , 收藏 , 编辑
摘要: 在SOA架构中对于WCF中的系列化问题,很大程序上影响系统的性能,为了更好应用那种序列化方式,做了一下自己的比较:Message Shark的序列化和反序列化的效率几乎非常接近google 的 protocol buffer再看一下MessageShark 是如何实现的首先把各种序列化做个介绍(一) Protocol Buffer 序列化1.1 什么是protocol bufferProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程 阅读全文
3 Comment Categories: SOA
Erp项目之技术架构 2012-09-25 15:45 by xlw, 48 visits, 网摘 , 收藏 , 编辑
摘要: 对于Erp项目中用到的一些技术做个介绍:数据层ORM:NHibernate,EF4.3.1,服务层:WCF,Thrift缓存:AppFabric,Redis,Memcached,Web,Memory业务层:Workflow4.0工作流设计:Silverlight视频会议系统:Silverlight前端架构: MVP设计采用DDD,数据层采用Repository,UnitofWork当然Erp项目开发中没有敏捷,就难有大用,敏捷框架V1.0。。。。 阅读全文
0 Comment Categories: SOA
Erp项目之 SOA服务缓存策略 2012-09-25 15:18 by xlw, 279 visits, 网摘 , 收藏 , 编辑
摘要: 到今天为至把缓存写完了,Erp的架构也基本完成,今天写些东西说明一下Erp中的SOA服务缓存的策略,首先是为什么要在SOA服务层加上缓存,一个是加快SOA客户端读取速度,缩短调用响应时间,从而扩大系统的吞吐量。 首先看一下缓存策略,缓存要支持:Memory,Web园,AppFabric,Memcached,Redis,通过策略方式,通过autofac 依赖反转 自己的策略,通过autofac,读取系统配置适用的缓存方式。在SOA服务上首先通过读取缓存的数据,代码也很简单,不过这个结果在后台的设计中会做部分的调整。SOA缓存策略目前是否考虑在WCF代理调用上再加一个缓存,在服务上对数据也进行缓. 阅读全文
0 Comment Categories: SOA , 缓存
ERP项目之 SOA通信模型(1) 2012-09-24 11:41 by xlw, 1225 visits, 网摘 , 收藏 , 编辑
摘要: 对于ERP中的SOA架构,做了一个简单的模型图来说明一下,前端采用MVP,通过SOA客户端Facade,调用SOA代理,SOA的服务层采用WCF 架构,通过权限认证和分布式缓存机制对不同的服务进行访问。对WCF服务支持的引擎模块有工作流,报表,邮件等。 WCF服务层通过ESB异步通信完成与物理模块的操作。我会在下面的blog中一个一个的说明。这里只是能这个初步的模型图做个说明 以便下一步分解。用于实现 SOA 可伸缩性的企业服务总线企业服务总线 (ESB) 是一个行业概念,其中使用了许多技术进行构建。ESB 是 Web 服务的基础结构,可协调组件之间的通信。简而言之,ESB 是让多个应用程序异 阅读全文
2 Comment Categories: SOA
WCF设计ERP服务层架构(1) 2012-09-22 09:42 by xlw, 101 visits, 网摘 , 收藏 , 编辑
摘要: 从今天开始,开始写一些ERP软件中WCF实现服务层的东西。 阅读全文
3 Comment Categories: SOA , WCF随笔分类 -架构技术
C# ESB开源项目比较 NServiceBus vs MassTransit vs PEServiceBus 2012-10-09 12:02 by xlw, 43 visits, 网摘 , 收藏 , 编辑
摘要: 因为项目需要,对一些开源的ESB产品做些分析和比较,NServiceBus vs MassTransit vs PEServiceBus 在今后的blog中我会把这几种产品做一个详细的分析和实例比较,可以提供大家参考 NServiceBus说明对比Web服务这几乎不值得的努力,也需要输入。一旦你把“红色药丸”你永远不会看到的世界一样了。对我来说,这是要乌迪的类。去上他的课之前我已经做了十年的使用SOAP和REST的Web服务,我一直运行到同一类型的问题,一遍又一遍。我读过的所有的供应商的最佳实践等等,但一直困扰我的事情是如何与这些“最佳实践”(如果它甚至适当给他们打电话),总是指出我们回到购. 阅读全文
0 Comment Categories: SOA , 架构技术 , ESB
Erp项目架构完成了 2012-10-09 09:59 by xlw, 33 visits, 网摘 , 收藏 , 编辑
摘要: Erp项目架构完成了,完成了一个SOA 的轻量级ESB架构 阅读全文
0 Comment Categories: SOA , solr开发 , 架构技术
软件架构图 2012-03-16 15:51 by xlw, 310 visits, 网摘 , 收藏 , 编辑
0 Comment Categories: 架构技术
http://blog.chinaunix.net/uid-24889120-id-3124292.htm 2012-03-14 17:43 by xlw, 40 visits, 网摘 , 收藏 , 编辑
摘要: http://blog.chinaunix.net/uid-24889120-id-3124292.htm 阅读全文
0 Comment Categories: Hadoop , 架构技术
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于C#版企业总线(ESB)设计说明书的详细内容...