搭建一个简单的Eureka集群
现在我们稍微把上一篇文章中的Eureka应用扩展一下,扩展成一个简单的Eureka集群。架构图如下所示:
我们要部署两台Eureka服务器,两台ServiceProvider。为此,首先要修改本机的Hosts文件,以便在一台机子上模拟出多台的效果。
Eureka Server端
新建maven项目first-cloud-server,其pom依赖如下:
1 | <dependencyManagement> |
我们通过启动时指定启动哪个server,server1还是server2.这就需要在配置文件中配置不同的profile。
启动类如下所示,启动时需要从输入中读取需要启动的server(server1或server2)
1 | @SpringBootApplication |
配置文件如下所示:
1 | server: |
配置文件中通过profiles声明了两套server配置。它们在启动完之后,会互相注册
Eureka provider
新建Maven项目first-cloud-provider,其pom文件的依赖如下所示:
1 | <dependencyManagement> |
因为我们也是需要启动两台Provider,就通过启动的时候指定不同的端口实现。启动类如下:
1 |
|
启动完成之后,分别向两台Eureka Server注册,配置文件如下:
1 | spring: |
我们还是对外提供了一个REST服务,代码如下:
1 |
|
与之前单机部署不同的是,这次在返回中添加了请求的URL信息。
Person Bean如下:
1 | public class Person { |
Eureka Invoker
同样地,创建first-cloud-invoker maven项目,其pom依赖为:
1 | <dependencyManagement> |
修改其配置文件,使其在启动之后向两个Eureka Server注册:
1 | server: |
同样地,提供一个对外的REST接口,供调用方调用
1 |
|
启动类:
1 |
|
Rest Client
这边简易实现了一个客户端Rest Client,用来调用Invoker提供的rest接口,以检验provider的负载均衡能力。
它也是一个Maven项目,pom依赖为:
1 | <dependencies> |
编写一个测试类,代码如下:
1 | public static void main(String[] args) throws Exception { |
启动
按照
- Eureka Server
- Eureka provider
- Eureka Invoker
的顺序启动。启动完成之后,可以看到Eureka Server1 和 Eureka Server2的注册信息。
最后,执行rest client,可以看到rest client 的输出为:
从输出中可以看出,Invoker在调用的时候,是调用端口12222一次,端口13333一次,然后又是端口12222一次的。说明Eureka 是做了负载均衡的。
接着再看下Invoker的日志:
1 | 2020-04-23 17:41:03.095 INFO 16484 --- [nio-9000-exec-1] c.n.l.DynamicServerListLoadBalancer : DynamicServerListLoadBalancer for client first-cloud-provider initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=first-cloud-provider,current list of Servers=[localhost:13333, localhost:12222],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone; Instance count:2; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;] |
从日志中可以看出,Invoker从Server中获取了服务first-cloud-provider
的服务列表,分别是localhost:12222和localhost:13333。