[ZooKeeper.net] 1 模仿dubbo实现一个简要的http服务的注册 基于webapi
2017-03-08 21:02
946 查看
今天来试着模仿下dubbo实现一个简要的http服务的注册,虽说是模仿不过是很廉价的那种,只是模仿了一点点点......
先放上demo目录结构:
public class ScanConfig { private String connectString = "127.0.0.1:2181"; private ZooKeeper zk = null; public ScanConfig() { init(); } public void init() { try { //初始化zk客户端 buildZKclient(); //绑定服务父节点 services名称 registBiz(); //得到所有服务地址 List<String> services = getServicePath(); //把服务注册到zk registBizServices(services); } catch (Exception) { //日志记录 } } /// <summary> /// 初始化连接 /// </summary> private void buildZKclient() { IZooKeeperFactory _factory = ZooKeeperFactory.Instance; zk = _factory.Connect(connectString, new TimeSpan(0, 0, 0, 30)); } /// <summary> /// 绑定父节点 /// </summary> private void registBiz() { if (zk.Exists("/" + WebApiConfig.bizCode, true) == null) { //创建一个目录节点,不进行ACL权限控制,节点为永久性的 zk.Create("/" + WebApiConfig.bizCode, ("Test:" + WebApiConfig.bizCode).GetBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.Persistent); } } /// <summary> /// 通过注解得到所有Api服务地址 /// </summary> /// <returns></returns> private List<String> getServicePath() { List<String> PathString = new List<string>(); Collection<ApiDescription> ApiString = GlobalConfiguration.Configuration.Services.GetApiExplorer().ApiDescriptions; foreach (var api in ApiString) { PathString.Add(api.RelativePath.Replace("/", ".")); } return PathString; } /// <summary> /// 把服务注册到zk /// </summary> /// <param name="Services">所有Api服务地址</param> private void registBizServices(List<String> Services) { //获取服务IP地址端口 IPAddress[] IPList = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList; string hostName = IPList[0].ToString(); //创建临时节点 会话断开 节点自动消失 foreach (var apiname in Services) { if (zk.Exists("/" + WebApiConfig.bizCode + "/" + apiname, true) == null) { //创建一个目录节点,不进行ACL权限控制,节点为永久性的 服务名称 zk.Create("/" + WebApiConfig.bizCode + "/" + apiname, ("Test:" + WebApiConfig.bizCode).GetBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.Persistent); } //创建一个目录节点,不进行ACL权限控制,节点为临时性的 服务提供者ip地址 zk.Create("/" + WebApiConfig.bizCode + "/" + apiname + "/" + hostName, ("Test:" + WebApiConfig.bizCode).GetBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.Ephemeral); } } }ScanConfig 最后Global.asax中 Application_Start方法加入就OK了
ScanConfig scan = new ScanConfig();
有关注册后节点过一段时间消失的问题可以参考下 _xxy 的http://www.cnblogs.com/xxyBlogs/p/5538583.html 这篇文章。
之前做过一个webservices接口里面有一些数据是调用别的项目的webservices接口,然后第一次访问这个接口处理时间老是很慢,处理方法跟 _xxy 这种处理大体一致,因为iis有闲时超时跟回收设置,所以到时间或回收后,webservices的xml序列化的操作需要从新做,所以调用很耗时,不过往往都是第一次很耗时,序列化过完后面就变的很快,加上当是部署了六台,不定那一台就处于闲时状态,当是就因为这个问题项目耽搁好几天没上线,后来设置了iis的闲时超时跟回收设置,又写了个页面,页面的load事件访问一下webservices,然后Application_Start的时候就启动一个定时器,设置一定时间后就http get一下这个页面,等于也是让序列化的过程在不知不觉中处理掉,这样有实际业务来的时候序列化的操作不用做了,耗时的问题也不存在了,项目也成功上线了,希望能帮助到有此类问题的童鞋哈!
相关文章推荐
- [ZooKeeper.net] 1 模仿dubbo实现一个简要的http服务的注册 基于webapi
- NET(C#)接入Dubbo服务,Zookeeper作为Dubbo服务的注册中心,实现thrift协议访问接口(3)
- C# .net基于Http实现web server(web服务)
- C# .net基于Http实现web server(web服务)
- C# .net基于Http实现web server(web服务)
- NET(C#)接入Dubbo服务,Zookeeper作为Dubbo服务的注册中心,实现thrift协议访问接口(1)
- NET(C#)接入Dubbo服务,Zookeeper作为Dubbo服务的注册中心,实现thrift协议访问接口(2)
- NET(C#)接入Dubbo服务,Zookeeper作为Dubbo服务的注册中心,实现thrift协议访问接口(1)
- NET(C#)接入Dubbo服务,Zookeeper作为Dubbo服务的注册中心,实现thrift协议访问接口(2)
- ASP.NET WebApi服务接口如何防止重复请求实现HTTP幂等性(八)
- 【Dubbo实战】 Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(二)
- 在Asp.net应用程序中构建基于WCF Web.Api的服务
- 采用Best effort 1pc + 回滚补偿机制实现的一个distributed transaction (分布式事务框架).基于dubbo rpc服务上实现。
- Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务
- Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【五】——在Web Api中实现Http方法(Put,Post,Delete)
- 【Dubbo实战】 Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(二)
- Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务
- 【Dubbo实战】 Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(二)
- AAA【Dubbo实战】 Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(二)