一、Eureka Server 集群
现在已经成功的实现了一个Eureka服务器,但是现在属于单节点的服务运行过程,如果说现在单节点的Eureka出现了错误,导致无法使用,那么对于所有的微服务架构就将出现整体的瘫痪,这样就需要进行Eureka集群搭建,同时利用集群可以有效的实现HA的处理机制,如果要进行集群的搭建一定要选择两台或以上的电脑完成。
1、参照https://www.jianshu.com/p/39ab9515b1c3,创建多一个Eureka服务器
2、修改Eureka服务器1的配置文件 application.yml,将 Eureka Server 1 指向 Eureka Server 2
eureka:
instance:
hostname: localhost #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
#设置与 Eureka Server 交互的服务地址
#单机就是7001自己
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#集群指向其它Eureka Server
defaultZone: http://eureka7002.com:7002/eureka/
3、修改Eureka服务器2的配置文件 application.yml,Eureka Server 2 指向 Eureka Server 1
eureka:
instance:
hostname: localhost #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
#设置与 Eureka Server 交互的服务地址
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#集群指向其它Eureka Server
defaultZone: http://eureka7001.com:7001/eureka/
instance:
instance-id: payment8002 #修改主机显示名称
prefer-ip-address: true #访问路径可以显示IP地址
4、将服务同时注册到Eureka Server 1 和Eureka Server 2
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 #修改主机显示名称
prefer-ip-address: true #访问路径可以显示IP地址
5、先启动Eureka Server,再启动Eureka Client,然后打开Eureka Server后台管理端,可以看到Eureka Server间相互指向,并且Eureka Client也注册到两个Eureka Server中
image.png image.png
二、Eureka Client 集群
1、只需要创建一个一模一样的服务,并且修改端口号
image.png
运行项目后可以看到服务“CLOUD-PAYMENT-SERVICE”指向两个不同的域名
image.png
2、修改服务请求地址,用Eureka显示的服务名代替
@RestController
@Slf4j
public class OrderController {
public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";
@Resource
private RestTemplate restTemplate;
@GetMapping("/consumer/payment/create")
public CommonResult<Payment> create(Payment payment)
{
return restTemplate.postForObject(PAYMENT_URL +"/payment/create",payment,CommonResult.class);
}
@GetMapping("/consumer/payment/get/{id}")
public CommonResult<Payment> getPayment(@PathVariable("id") Long id)
{
return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
}
}
3、在配置类 ApplicationContextConfig.java 中,使用 @LoadBalanced 注解赋予 RestTemplate 负载均衡的能力
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced //赋予 RestTemplate 负载均衡的能力
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
网友评论