1、Eureka集群原理
2、Eureka集群搭建
2.1、Eureka服务端集群搭建
2.1.1、服务端代码结构
2.1.2、服务端POM文件
2.1.3、 配置文件yaml
2.1.4、配置主启动类
2.1.5、重复上述过程新建其他Eureka服务端
2.1.6、 测试
2.2、Eureka 客户端-服务提供者集群搭建
2.2.1、创建多个微服务实例
2.2.2、在微服务实例中进行Eureka客户端配置
2.2.3、在单机客户端基础上,修改客户端yaml配置
2.2.4、测试
2.3、Eureka 客户端-服务提供者集群搭建
2.3.1、服务消费者 Controller 中访问url修改
2.3.2、 yaml配置文件修改
2.3.3、赋予restTemplate负载均衡机制
2.3.4、测试
3、微服务信息完善
3.1、规范化实例ID
3.1.1、修改yaml配置文件,添加微服务实例ID
3.1.2、访问Eureka服务端查看修改结果
3.2、显示微服务IP地址
3.2.1、修改yaml配置文件,添加地址显示
3.2.2、访问Eureka服务端查看修改结果
4、服务发现
4.1、DiscoveryClient 属性注入
4.2、调用 discoveryClient 中的方法获取微服务信息
原理概括:互相注册,相互守望
Cloud-eureka-server7001和Cloud-eureka-server7002均为服务端
加入spring-cloud-starter-netflix-eureka-server
cloud
com.uclass.springcloud
1.0-SNAPSHOT
4.0.0
Cloud-eureka-server7002
11
11
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
com.uclass.springcloud
Api-Commons
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
server:
port: 7002
eureka:
instance:
hostname: eureka7002.com #eureka服务端实例名称
client:
#false表示不向注册中心注册自己
register-with-eureka: false
#false表示自己就是注册中心,职责是维护服务实例,不需要检索服务
fetchRegistry: false
service-url:
#设置与Eureka Server交互的地址查询服务和注册服务的依赖地址
defaultZone: http://eureka7001.com:7001/eureka/
加入 @EnableEurekaServer 注解,声明是Eureka服务端
@SpringBootApplication
//表名该服务是Eureka服务注册中心
@EnableEurekaServer
public class EurekaMain7002 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7002.class, args);
}
}
打开对应的服务端url,如下所示即为配置集群成功
此处url通过 C:\Windows\System32\drivers\etc\hosts文件 添加 127.0.0.1 eureka7001.com
详情参考Eureka基础 Eureka基础_我的眼里只有学习的博客-CSDN博客
添加多个 service-url:defaultZone
eureka:
client:
#表示将自己注册进EurekaServer默认为true
register-with-eureka: true
#是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,
#集群必须设置为true,才能配合ribbon使用负载均衡
fetchRegistry: true
service-url:
# defaultZone: http://localhost:7001/eureka #单机版
defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka #集群版
服务消费者创建参考 Eureka基础_我的眼里只有学习的博客-CSDN博客
在单机版基础上,首先修改服务提供者访问路径:http://服务提供者的微服务名称
@Slf4j
@RestController
public class OrderController {
//单机版可以写死,访问的url
// public static final String PAYMENT_URL = "http://localhost:8001";
//联机版,寻找Eureka暴露的微服务名称
public static final String PAYMENT_URL = "http://cloud-payment-service";
@Resource
private RestTemplate restTemplate;
//添加用户信息
@GetMapping("/consumer/payment/create")
public CommonResult create(Payment payment) {
return restTemplate.postForObject(PAYMENT_URL + "/payment/create", payment, CommonResult.class);
}
//获取用户信息
@GetMapping("/consumer/payment/get/{id}")
public CommonResult getPayment(@PathVariable("id") Long id) {
return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
}
}
添加多个Eureka服务端 url
server:
port: 80
eureka:
client:
#表示将自己注册进EurekaServer默认为true
register-with-eureka: true
#是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,
#集群必须设置为true,才能配合ribbon使用负载均衡
fetchRegistry: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka
spring:
application:
name: cloud-order-service #微服务名称
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced //赋予restTemplate负载均衡机制
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
如果不赋予restTemplate负载均衡机制,访问出错:
instance:
# 主机名称的规范和修改
instance-id: payment8001
完整版:
eureka:
client:
#表示将自己注册进EurekaServer默认为true
register-with-eureka: true
#是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,
#集群必须设置为true,才能配合ribbon使用负载均衡
fetchRegistry: true
service-url:
# defaultZone: http://localhost:7001/eureka #单机版
defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka #集群版
instance:
# 主机名称的规范和修改
instance-id: payment8001
# 访问路径可以显示IP
prefer-ip-address: true
完整版:
eureka:
client:
#表示将自己注册进EurekaServer默认为true
register-with-eureka: true
#是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,
#集群必须设置为true,才能配合ribbon使用负载均衡
fetchRegistry: true
service-url:
# defaultZone: http://localhost:7001/eureka #单机版
defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka #集群版
instance:
# 主机名称的规范和修改
instance-id: payment8001
# 访问路径可以显示IP
prefer-ip-address: true
注册进Eureka的微服务,可以通过服务发现,获得该服务的信息、
@Resource
private DiscoveryClient discoveryClient;
@GetMapping(value = "/payment/discovery")
public Object discovery(){
List services = discoveryClient.getServices();
for (String element:services){
log.info("****element:" + element);
}
//通过微服务名称获取微服务ID
List instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
for (ServiceInstance instance:instances){
log.info(instance.getServiceId() + "\t" + instance.getHost()
+ "\t" + instance.getPort() + "\t" + instance.getUri());
}
return this.discoveryClient;
}