“一切都是消息”--MSF(消息服务框架)入门简介
2017-09-28 16:16
746 查看
“一切都是消息”--这是MSF(消息服务框架)的设计哲学。
MSF的名字是 Message Service Framework 的简称,中文名称:消息服务框架,它是PDF.NET框架的一部分。
2011年,我来到某在线拍卖的电商创业公司,公司要求在1个月内开发出一套拍卖客户端软件。大家都知道创业公司的工作节奏,这么短时间要开发出一套类似炒股软件的在线拍卖软件是很难的,幸好有之前的“消息推送框架”,买家通过竞拍软件,实时更新竞拍价格,众多买家和卖家在线完成拍卖,整点抢拍,“消息推送框架”作为竞拍软件的基础服务通信框架,保证了整个软件的研发成功。不幸的是当时很多客户用的还是XP系统,还是深度克隆版,装不上.NET框架,半年后客户端产品放弃了,公司整体上转向BS应用结构和移动APP软件,“消息推送框架”在公司也随着客户端产品的遗弃而不再有人提起。
2015年,“消息推送框架”纳入PDF.NET框架集合,正式命名为MSF,对外开源。MSF跟SOD框架一起,成为PDF.NET的企业框架集合的成员,其位置如下图所示(WCF Message Service Framework):
View Code
6,生成MSFTest项目
如果已经生成过,请右键菜单,重新生成项目,这一步将自动启动MSF Host。
7,运行TestClient项目
在服务端和客户端随意输入文字内容,服务端可以将消息推送给所有订阅此消息的客户端。
也可是指定程序路径方式来添加防火墙规则:
相关的代码如下:
服务代理对象的SubscribeTextMessage 方法发起文本定义,并且接受一个异步消息的委托。订阅之后,只要不关闭连接,之后随时可以使用 SendTextMessage 发送消息。
这样,一个简单的MSF消息通话示例就做好了,我们看到在服务器端一行代码都没有编写。
如果要自定义我们的业务服务,就需要写一点代码了,但也很简单,下一篇再继续,
或者你可以先看看网友写的介绍:
MSF的名字是 Message Service Framework 的简称,中文名称:消息服务框架,它是PDF.NET框架的一部分。
1,MSF诞生的背景
MSF最初来源于2009年,我们为某银行开发的基金投资分析系统,由于银行安全的原因并且这些投资资料属于机密资料,规定必须使用邮件系统来发送这些资料,但是邮件的收发不是直接针对人,而是两端的计算机程序。为了及时向客户发送这些投资资讯,我们使用WCF开发了基于邮件的通信系统。后来,从这套系统中分离出来跟业务无关的“消息推送框架”,这就是MSF的雏形。2011年,我来到某在线拍卖的电商创业公司,公司要求在1个月内开发出一套拍卖客户端软件。大家都知道创业公司的工作节奏,这么短时间要开发出一套类似炒股软件的在线拍卖软件是很难的,幸好有之前的“消息推送框架”,买家通过竞拍软件,实时更新竞拍价格,众多买家和卖家在线完成拍卖,整点抢拍,“消息推送框架”作为竞拍软件的基础服务通信框架,保证了整个软件的研发成功。不幸的是当时很多客户用的还是XP系统,还是深度克隆版,装不上.NET框架,半年后客户端产品放弃了,公司整体上转向BS应用结构和移动APP软件,“消息推送框架”在公司也随着客户端产品的遗弃而不再有人提起。
2015年,“消息推送框架”纳入PDF.NET框架集合,正式命名为MSF,对外开源。MSF跟SOD框架一起,成为PDF.NET的企业框架集合的成员,其位置如下图所示(WCF Message Service Framework):
class Program { static void Main(string[] args) { Console.WriteLine("******** PDF.NET MSF 客户端测试程序 *********"); Console.WriteLine(); Proxy client = new Proxy(); client.ErrorMessage += client_ErrorMessage; Console.Write("请输入服务器的主机名或者IP地址(默认 127.0.0.1):"); string host = Console.ReadLine(); if (string.IsNullOrEmpty(host)) host = "127.0.0.1"; Console.WriteLine("服务地址:{0}",host); Console.Write("请输入服务的端口号(默认 8888):"); string port = Console.ReadLine(); if (string.IsNullOrEmpty(port)) port = "8888"; Console.WriteLine("服务端口号:{0}", port); client.ServiceBaseUri = string.Format("net.tcp://{0}:{1}", host, port); Console.WriteLine("当前客户端代理的服务基础地址是:{0}",client.ServiceBaseUri); Console.WriteLine(); string repMsg = "你好!"; client.SubscribeTextMessage("我是客户端", serverMessage => { Console.WriteLine(); Console.WriteLine("[来自服务器的消息]::{0}", serverMessage); }); while (repMsg != "") { Console.Write("回复服务器(输入为空,则退出):>>"); repMsg = Console.ReadLine(); client.SendTextMessage(repMsg); } Console.WriteLine("测试完成,退出"); } static void client_ErrorMessage(object sender, MessageSubscriber.MessageEventArgs e) { Console.WriteLine("---处理服务时错误:{0}",e.MessageText); } }
View Code
6,生成MSFTest项目
如果已经生成过,请右键菜单,重新生成项目,这一步将自动启动MSF Host。
7,运行TestClient项目
在服务端和客户端随意输入文字内容,服务端可以将消息推送给所有订阅此消息的客户端。
如何启动MSF Host
在VS解决方案资源管理器上,选择安装过 nuget 程序包 PDF.Net.MSF.Service.Host 的项目,右键菜单,“重新生成”命令,即可启动MSF Host,它是在Nuget安装程序包的时候,给项目的编译前后添加了事件实现的:copy /y "$(TargetDir)*.*" "$(SolutionDir)Host" cd "$(SolutionDir)Host" start "MessageService Host" "SucessCompiled.vbs"
为MSF Host添加防火墙规则
如果你需要让MSF Host远程访问,可能需要管理防火墙规则,用管理员权限打开 CMD命令,运行下面的命令行:netsh advfirewall firewall add rule name="PDF.NET.MSF.Host" dir=in action=allow protocol=TCP localport=8888
也可是指定程序路径方式来添加防火墙规则:
netsh advfirewall firewall add rule name="PDF.NET.MSF.Host" dir=in action=allow program="D:\MSFHost\PdfNetEF.MessageServiceHost.exe"
订阅和发送文本消息
MSF客户端程序,可以直接订阅MSF服务宿主的文本消息服务,之后,就可以随时向MSF服务宿主发送文本消息,并且能够异步的从MSF服务宿主接受消息。相关的代码如下:
Proxy client = new Proxy(); client.ServiceBaseUri = string.Format("net.tcp://{0}:{1}", host, port); client.SubscribeTextMessage("我是客户端", serverMessage => { Console.WriteLine(); Console.WriteLine("[来自服务器的消息]::{0}", serverMessage); }); while (repMsg != "") { Console.Write("回复服务器(输入为空,则退出):>>"); repMsg = Console.ReadLine(); client.SendTextMessage(repMsg); }
服务代理对象的SubscribeTextMessage 方法发起文本定义,并且接受一个异步消息的委托。订阅之后,只要不关闭连接,之后随时可以使用 SendTextMessage 发送消息。
这样,一个简单的MSF消息通话示例就做好了,我们看到在服务器端一行代码都没有编写。
如果要自定义我们的业务服务,就需要写一点代码了,但也很简单,下一篇再继续,
或者你可以先看看网友写的介绍:
SOD开源框架MSF(消息服务框架)介绍
欢迎加入我们的QQ群讨论MSF框架的使用,群号:敏思(PWMIS) .NET 18215717,加群请注明:PDF.NET技术交流,否则可能被拒。相关文章推荐
- “一切都是消息”--MSF(消息服务框架)之【请求-响应】模式(点对点)
- “一切都是消息”--MSF(消息服务框架)之【发布-订阅】模式
- “一切都是消息”--MSF(消息服务框架)之【发布-订阅】模式
- “一切都是消息”--MSF(消息服务框架)之【发布-订阅】模式
- 使用“消息服务框架”(MSF)实现分布式事务的三阶段提交协议(电商创建订单的示例)
- 消息服务框架(MSF)应用实例之分布式事务三阶段提交协议的实现
- SOD开源框架MSF(消息服务框架)进阶篇
- SOD开源框架MSF(消息服务框架)介绍
- 分布式服务框架 Zookeeper(三)官方入门指南
- 分布式服务框架 dubbo/dubbox 入门示例
- 微服务开发的入门级框架Spring Boot详解:注解
- Spring Web Services 框架入门研究--发布服务
- 云计算工具,框架,服务简介
- 【Facebook的UI开发框架React入门之八】Image的使用简介(iOS平台)-goodmao
- Spring Cloud 快速入门esclipse快速搭建微服务框架 (一)-注册与发现
- 分布式服务框架Dubbo入门案例和项目源码
- Spring 框架简介(Spring AOP 和 IOC 容器入门)
- 分布式服务框架Dubbo入门实例
- 微服务开发的入门级框架Spring Boot详解(三)
- JMS(Java消息服务)入门教程