上文,我们讲到了微服务框架应该实现的功能,并且列出了主要的1、2、3、4点。因为第1点是根据定义好的schema生成不用语言的client和service,我们暂时是可以替代的。所以,我们首先从第2点也就是服务的注册开始。
一、前言
服务的注册,毫无疑问是服务启动的时候,将服务注册到一个地方,然后其他人就能发现这个服务。
注册的内容:服务的名字,服务的地址(包括端口)。其中,服务的名字我们可以作为主键来查找。
至于服务注册的时机,毋庸置疑最好是web容器启动的时候。
唯一不同的可能就是服务注册的方式。
比如,我想到的方案就有如下两个:
1、有一个服务注册中心,服务启动的时候,将自己的注册信息发过去,同时服务注册中心给每台机器的每个服务开一个长连接,定期检测心跳。服务挂了就从注册中心移除,恢复了就加入到注册中心。
2、直接用zookeeper的znode进行管理。服务名称存为路径,服务的地址存为内容。
其实两个方案本质都一样:服务挂了就移除,服务活了就新增,而且要保证近乎实时。
《轻量级微服务架构》这本书里面讲的是方法2, 我们也用方法2来实践一遍。
�
二、服务准备
我用的是IDEA14.1.4+jdk1.7。
首先是zookeeper集群的搭建。网上教程很多,我就不重复写了。
学习的时候,可以根据这个博客,搭了个windows的伪集群。
http://blog.csdn.net/morning99/article/details/40426133
然后我建一个springboot的HelloService服务。
首先是Application.java
![](https://img.haomeiwen.com/i4720233/0dfb168b476eb114.png)
然后是HelloController.java
![](https://img.haomeiwen.com/i4720233/49806320eeed8d5a.png)
启动服务,通过8080端口访问。
启动参数:-Dserver.port=8080
![](https://img.haomeiwen.com/i4720233/1b4f8f4ffc27516f.png)
启动服务,通过8082端口访问。
启动参数:-Dserver.port=8082
![](https://img.haomeiwen.com/i4720233/3be289a43c639ac1.png)
三、定义服务注册接口
ServiceRegistry.java
![](https://img.haomeiwen.com/i4720233/5c5e8faf97049d96.png)
四、使用ZooKeeper实现服务注册
在实现服务之前 , 我们需要准备一些配置
在资源文件里新建application.properties
文件内容如下:
server.address=127.0.0.1
server.port=8080
registry.servers=127.0.0.1:2181
然后我们实现下ServiceRegistry接口ServiceRegistryImpl.java
![](https://img.haomeiwen.com/i4720233/7334c0f26524d42e.png)
![](https://img.haomeiwen.com/i4720233/f4cba30f85334c99.png)
RegisteryConfig.java
![](https://img.haomeiwen.com/i4720233/4b1a07c482c93f87.png)
最后是WebListener.java
![](https://img.haomeiwen.com/i4720233/c1fca658f137dfeb.png)
五、使用ZooKeeper客户端查看结果
首先启动zookeeper服务端。
修改application.properties文件里的
server.port=8080
用8080端口启动一次springboot
修改application.properties文件里的
server.port=8082
用8082端口启动一次springboot
最后 , 我们用命令zkCli.cmd -server 127.0.0.1:2181看下zookeeper的情况.
![](https://img.haomeiwen.com/i4720233/4b449788c9d5219b.png)
我们再来观察一下节点的内容:
![](https://img.haomeiwen.com/i4720233/dfad87882b5f3ce9.png)
![](https://img.haomeiwen.com/i4720233/78ec5644e9850de0.png)
然后, 我们关掉用8082端口开启的springboot。
再次查看的时候,发现只有一个节点了
![](https://img.haomeiwen.com/i4720233/6c1496c3bd94a25e.png)
然后,再次开启8082端口的springboot。
又出来了两个节点
![](https://img.haomeiwen.com/i4720233/d8c6ff2da3f06645.png)
到这里 , 我们就基本实现了微服务的注册。
下一节,我们将实现微服务的node.js网关
网友评论