版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25484147/article/details/83211517
概述
这篇文章主要介绍的内容是如何实现eureka的高可用。这篇文章是建立在前一篇文章的基础上,所以,如果没有看过
前一篇文章的,可以访问[ spring cloud eureka](https://blog.csdn.net/qq_25484147/article/details/83211369)
这一篇文章。
实现eureka高可用的基本原理
Eureka Server的高可用实际上就是将自己作为服务向其他服务注册中心注册自己,这样就可以形成一组互相注册的服务
注册中心,以实现服务清单的互相同步,达到高可用的效果。
对eureka server进行改造
配置文件目录
要实现高可用,最少需要两台eureka server,这里只是模拟一下。
application.properties
#server.port=11111
#spring.application.name=eureka
#eureka.instance.hostname=localhost
#eureka.client.fetch-registry=false
#eureka.client.register-with-eureka=false
spring.profiles.active=peer2
spring.profiles.active指明的是那个配置文件,一般在企业开发中用来区分环境,(dev,test,aliyun,online)这些环境。
application-peer1.properties
spring.application.name=eureka-server
server.port=11111
eureka.instance.hostname=peer1
eureka.client.serviceUrl.defaultZone=http://peer2:11114/eureka/
这里这个要实现相互注册,所以注册地址是11114端口的,表示注册到peer2这台主机上。
application-peer2.properties
spring.application.name=eureka-server
server.port=11114
eureka.instance.hostname=peer2
eureka.client.serviceUrl.defaultZone=http://peer1:11111/eureka/
这里表示注册到peer1这台主机上。
peer1,peer2代表的是不同的主机。这里在window下需要修改hosts文件,把127.0.0.1指向到peer1, peer2.
idea配置不同的环境
如果要启动peer这个配置文件,则application.propertes配置文件中的spring.profiles.active=peer1,如果要启动peer2这
个配置文件,则application.properties中的spring.profiles.active=peer2,这里有一个问题是,因为这里同一时间只能启
动一个,所以在启动第一个的时候回报错,但是不用关心,等到第二个eureka server启动之后,spring cloud会通过心
跳自动检测。第二个启动之后,第一个也会好。
当两个server 都启动之后的结果。
如果去访问http://localhost:11111/
如果去访问http://localhost:11114
修改 eureka client
在client的配置文件中eureka.client.serviceUrl.defaultZone=http://localhost:11111/eureka/修改为eureka.client.serviceUrl.defaultZone=http://localhost:11111/eureka/,http://localhost:11114/eureka/。
同时修改java代码:
package com.bobo.eurekaserver.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* 测试类
*
* @author [email protected]
* @create 2018-10-15 17:27
**/
@RestController
public class HelloController {
private Logger logger = LoggerFactory.getLogger(HelloController.class);
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String index() {
String services = "Services: " + discoveryClient.getServices();
System.err.println(services);
return "hello world";
}
}
修改eureka comsume
在client的配置文件中eureka.client.serviceUrl.defaultZone=http://localhost:11111/eureka/修改为eureka.client.serviceUrl.defaultZone=http://localhost:11111/eureka/,http://localhost:11114/eureka/。