在前面两节内容中,我们已经完成了Eureka服务注册中心的搭建,和服务的注册,本节我们将对服务的发现以及负载均衡策略进行分析

在Eureka中,服务发现是基于服务名称来获取服务列表,然后通过负载均衡策略,选择列表中合适的一项来进行服务的调用。

首先启动两个userUsevice服务:

1、在已启动的userService服务中右键,选择 Copy Configuration

负载均衡服务器订阅的redis队列 负载均衡 服务发现_负载均衡服务器订阅的redis队列


2、在虚拟机参数 VM options 中设置 -Dserver.port=8082(端口号要和前一个服务不同)

负载均衡服务器订阅的redis队列 负载均衡 服务发现_负载均衡_02


3、启动我们设置好的第二个服务

负载均衡服务器订阅的redis队列 负载均衡 服务发现_服务列表_03


4、我们再启动orderService服务和Eureka服务中心

负载均衡服务器订阅的redis队列 负载均衡 服务发现_负载均衡服务器订阅的redis队列_04


负载均衡服务器订阅的redis队列 负载均衡 服务发现_eureka_05


5、将RestTemplate注入到Spring容器中,并添加 @LoadBalanced 注解实现负载均衡策略。

负载均衡服务器订阅的redis队列 负载均衡 服务发现_服务发现_06


6、在orderService服务中,我们在业务层修改调用userService服务的的url,将ip端口的调用模式修改为userService的服务名称。

负载均衡服务器订阅的redis队列 负载均衡 服务发现_负载均衡服务器订阅的redis队列_07


7、我们查看Eureka服务中心,可以看到已注册的服务,其中userService服务是一个列表,包含了8081,8082两个端口的服务。

负载均衡服务器订阅的redis队列 负载均衡 服务发现_服务发现_08


8、我们通过requestMapping调用orderService的queryOrderByUserId方法。

负载均衡服务器订阅的redis队列 负载均衡 服务发现_eureka_09


9、我们查看userService服务其中一个端口的控制台,假设先看8081

负载均衡服务器订阅的redis队列 负载均衡 服务发现_负载均衡服务器订阅的redis队列_10


可以看到控制台并没有任何输出,我们再查看8082:

负载均衡服务器订阅的redis队列 负载均衡 服务发现_服务发现_11


可以看到该端口的服务执行了一条sql语句,很明显,orderService选择了8082端口的userService服务进行调用。

前面我们提到过,在Eureka中,服务发现是基于服务名称来获取服务列表,然后通过负载均衡策略,选择列表中合适的一项来进行服务的调用。因此在本案例中,orderService通过Eureka服务中心发现了需要调用的userService服务列表,然后通过负载均衡的方式选择了8082端口的userService服务进行服务调用。