服务注册与发现 (Eureka)
Spring Cloud 版本: 2021.0.4
Spring Boot 版本: 2.6.11
服务注册中心
引入依赖
<!--Eureka服务端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
配置文件
eureka:
instance:
prefer-ip-address: true #服务显示IP地址
client:
service-url:
defaultZone: http://127.0.0.1:8090/eureka # Eureka服务端注册地址
register-with-eureka: false # 是否将自身注册
测试
添加启动类,并且添加注解**@EnableEurekaServer**
访问端口可以看到Eureka启动页面, 由于设置自身不进行注册, 所以可以看到目前Eureka实例中不存在任何的服务列表;
集群
如果想要多个Eureka同时工作形成集群状态, 仅需要将yaml文件中defaultZone后面地址换成其他Eureka的地址即可,以逗号分隔开.例如:
eureka:
instance:
prefer-ip-address: true #服务显示IP地址
client:
service-url:
# Eureka服务端注册地址
defaultZone: http://127.0.0.1:8091/eureka,http://127.0.0.1:8092/eureka,http://127.0.0.1:8093/eureka
register-with-eureka: false # 是否将自身注册
Eureka客户端
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置文件
spring:
application:
name: service8080 # 注册的服务名称
eureka:
client:
register-with-eureka: true
service-url:
defaultZone: http://127.0.0.1:8090/eureka # 配置将此实例注册到哪一个Eureka服务中
测试
启动器添加 @EnableEurekaClient, 注意这是添加的是Client
此时可以看到SERVICE8080已经加入到了注册中心.自此Eureka组件的搭建就已经完成,
如果同一服务部署到了多台机器,可以在注册时将服务名填写相同,Eureka会自动组合.
服务发现
注册进Eureka的服务,在调用其他服务时会自动拉取,对应的服务列表,这些是Eureka来帮我们完成,同时我们也可以手动拉取查看调用 .
-
启动功能类添加注解@EnableDiscoveryClient,启用DiscoveryClient
-
新建一个controller,注入DiscoveryClient
@Resource DiscoveryClient discoveryClient; @GetMapping("client") public Object client() { //获取服务名 SERVICE8080 下的所有实例 List<ServiceInstance> server8080 = discoveryClient.getInstances("SERVICE8080"); // 打印所有实例 for (ServiceInstance serviceInstance : server8080) { System.out.println(serviceInstance.getInstanceId() + " host: " + serviceInstance.getHost() + " port:" +serviceInstance.getPort() ); } return server8080; } }
注意
在配置yml文件时注意格式, 冒号 " : "后时需要有一个空格.