目录

order-service 如何得知 user-service 实例地址?
order-service 如何从多个 user-service 实例中选择具体的实例?
order-service从实例列表中利用负载均衡算法选中一个实例地址,向该实例地址发起远程调用
order-service 如何得知某个 user-service 实例是否依然健康,是不是已经宕机?

总结:

1.接第二章远程调用案例cloud_demo,创建maven子模块eureka-server,引入starter
org.springframework.cloud spring-cloud-starter-netflix-eureka-server
2.编写启动类,添加@EnableEurekaServer注解,开启 eureka 的注册中心功能
- @EnableEurekaServer
- @SpringBootApplication
- public class EurekaApplication {
- public static void main(String[] args) {
- SpringApplication.run(EurekaApplication.class,args);
- }
- }
3.添加application.yml文件,编写下面的配置
server:
port: 10086 # 服务端口
spring:
application:
name: eureka-server # 服务名称
eureka:
client:
service-url: # 地址信息
#eureka自己也是一个微服务,启动时需要将自己也注册到注册中心
defaultZone: http://127.0.0.1:10086/eureka
其中 defaultZone 是因为eureka 本身也是一个微服务,这里也要将自己注册进来,当后面 eureka 集群时,这里就可以填写多个,使用 “,” 隔开。
4.从启动类启动,访问http://localhost:10086/

启动报错:NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
解决:这是因为springboot和springcloud的版本不匹配,按照官网Spring Cloud说明使用匹配版本如:springboot2.7.x和springcloud2021.0.x
将 user-service、order-service 都注册到 eureka
1.在各模块引入依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-client
2.修改配置文件
在配置文件添加以下内容
spring:
application:
#name: eureka-server # 服务名称
#name: order-server # 服务名称
name: user-server # 服务名称
eureka:
client:
service-url: # 地址信息
#注册到注册中心
defaultZone: http://127.0.0.1:10086/eureka
3.启动类启动

在注册中心可看到多个服务。
小技巧:通过 idea 的多实例启动,可以查看 Eureka 的集群效果。 为了避免端口冲突,需要修改端口设置
点击ok后在services可看到刚添加的实例
启动后,在eureka注册中心可看到
在 order-service 中完成服务拉取,然后通过负载均衡挑选一个服务,实现远程调用
1.修改OrderService的代码,修改访问的url路径,用需要访问的服务的相应配置文件的服务名称代替ip、端口:
原:
String url = "http://localhost:8081/user/"+order.getUserId();
修改为:
String url = "http://user-server/user/"+order.getUserId();
2.在配置类给 RestTemplate 这个 Bean 添加一个 @LoadBalanced 注解,用于开启负载均衡
- @Configuration
- public class OrderConfiguration {
- /**
- * 创建RestTemplate并注入spring容器
- * @return
- */
- @Bean
- @LoadBalanced //开启负载均衡
- public RestTemplate restTemplate(){
- return new RestTemplate();
- }
- }
3.重新启动order-server,
依次访问http://localhost:8080/order/101,http://localhost:8080/order/102


可以看到,eureka自动实现负载均衡