Eureka单节点及高可用(详细配置)

一:构建单节点Eureka服务注册中心

1.创建Eureka server

    1)创建part-1-eureka项目,修改pom.xml文件

<parent>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-parent</artifactId>
		<version>Dalston.SR1</version>
		<relativePath />
	</parent>
	
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Dalston.SR1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

    依赖以上parent 、dependencies主要是想使用其版本的Eureka

    以下才是最主要的需要依赖的

<dependencies>
		<!-- spring-boot-starter-web web项目,集成容器tomcat -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- spring-boot-starter-actuator 管理工具/web 查看堆栈,动态刷新配置 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!-- cloud eureka组件 注册中心 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
		</dependency>
	</dependencies>

    注意:web项目主要是提供对外服务的,actuator主要是提供项目监控的。真正提供Eureka服务的是eureka-server

 

    2)在Application上添加@EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
public class EurekaApp {
	public static void main(String[] args) {
		new SpringApplicationBuilder(EurekaApp.class).web(true).run(args);
	}
}


    3)修改application.properties,设置应用名称为part-1-eureka

spring.application.name=part-1-eureka

    设置port为1001

server.port=1001


    4)修改application.yml,设置Eureka信息

eureka:
  client:
    fetch-registry: false  # 是否拉取信息
    register-with-eureka: false  # 是否注册到eurekaserver
    service-url:
      defaultZone: http://eureka1:1001/eureka/
  server:
    wait-time-in-ms-when-sync-empty: 0
    enable-self-preservation: true # false 关闭自我保护,不管如何都要剔除心跳检测异常的服务
  instance:
    hostname: eureka1 

 

    注意:需要设置host文件中eureka1对应的IP地址;不需要将自己注册到eurekaserver

 

    5)启动EurekaApp,启动成功后访问http://eureka1:1001 页面访问成功即启动Eurekaserver成功 

    

2.创建Eureka client

    6)创建应用part-1-sms-interface

配置pom.xml,需添加eureka client依赖,可以选择将eureka-server项目part-1-eureka 的maven依赖eureka-server换成以下依赖即可

<!-- cloud eureka组件 客户端 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>


配置application.yml文件

eureka:
  client:
    registerWithEureka: true
    fetchRegistry: true
    # eureka server地址
    serviceUrl:
      defaultZone: http://eureka1:1001/eureka/
  instance:
    # 心跳间隔
    leaseRenewalIntervalInSeconds: 30
    instance-id: ${spring.application.name}:${server.port}

 

    注意:defaultZone需要跟server保持一致

    

    7)在Application上添加@EnableEurekaClient

@SpringBootApplication
@EnableEurekaClient
public class SmsInterfaceApp {
	
	public static void main(String[] args) {
		new SpringApplicationBuilder(SmsInterfaceApp.class).web(true).run(args);
	}
}

    注意:此时为client

 

    8)启动SmsInterfaceApp,启动成功后,查看http://eureka1:1001/ 即发现sms应用注册到Eureka中

 

3.Java通过注册中心调用sms服务

 

    9)创建一个新的项目,并注册到Eurekaserver中,步骤同上

    10)在Controller中注入DiscoveryClient对象,并展示其instance,代码如下

@RestController
@RequestMapping("/web")
public class TestController {
	
	@Autowired
	DiscoveryClient discoveryClient;  // spring cloud 提供的客户端工具
	
	@RequestMapping(value="/test", method = RequestMethod.GET)
	public String test() throws IOException{
		// 调用服务器之前,通过eureka client 查询服务的实例信息
		// 也就是说去看 部署了哪些机器,以及IP 端口等信息
		List<ServiceInstance> instances = discoveryClient.getInstances("part-1-sms-interface");
		ServiceInstance serviceInstance = instances.get(0);
		// 获取的IP 端口  信息
		String host = serviceInstance.getHost();
		int port = serviceInstance.getPort();
		String result = new RestTemplate().getForObject("http://" + host + ":" + port +"/sms/test", String.class);
		return result;
	}
}

 

    注意:通过discoveryClient.getInstances方法,获取服务名对应的host和port信息,然后通过restTemplate来远程调用该应用

        * 需要先在sms应用中添加一个/sms/test对外服务

 

二:构建高可用Eureka server

 

    Eureka server的服务治理中,每个节点既是服务提供方,也是服务消费方,注册中心也而不例外

    Eureka的高可用实际就是将自己作为服务向其他注册中心注册自己,这样就形成一组互相注册的服务注册中心,以实现服务清单的互相同步,达到高可用效果

 

    1)创建part-1-eureka-ha项目,基本过程同part-1-eureka的创建

    2)修改part-1-eureka的application.yml文件

eureka:
  client:
    # 是否注册到eurekaserver
    registerWithEureka: true
    # 是否拉取信息
    fetchRegistry: false
    # eureka server地址
    serviceUrl:
      defaultZone: http://eureka2:1002/eureka/
  server:
    waitTimeInMsWhenSyncEmpty: 0
    # false 关闭自我保护,不管如何都要剔除心跳检测异常的服务
    enableSelfPreservation: true
  instance:
    hostname: eureka1

  

    注意:不同点有两处:registerWithEureka 修改为true ;defaultZone修改为eureka2 也就是part-1-eureka-ha所在的服务器地址

   

    3)修改part-1-eureka-ha的application.yml文件 

    同样修改这两处,defaultZone修改为eureka1,也就是part-1-eureka所在的服务器地址

eureka:
  client:
    fetch-registry: false  # 是否拉取信息
    register-with-eureka: true  # 是否注册到eurekaserver
    service-url:
      defaultZone: http://eureka1:1001/eureka/
  server:
    wait-time-in-ms-when-sync-empty: 0
    enable-self-preservation: true # false 关闭自我保护,不管如何都要剔除心跳检测异常的服务
  instance:
    hostname: eureka2 

 

    4)修改两个项目的Spring.application.name为相同值,笔者定义为part-1-eureka

        

    5)启动两个server项目

    在console可看到注册成功信息

Registered instance PART-1-EUREKA/eureka1:part-1-eureka:1001 with status UP (replication=false)
DiscoveryClient_PART-1-EUREKA/eureka1:part-1-eureka:1002 - registration status: 204
Registered instance PART-1-EUREKA/eureka1:part-1-eureka:1002 with status UP (replication=true)

    

    访问http://eureka:1001/ 

    即可发现status 存在两个状态为UP的服务,在GeneralInfo中也可以看到available-replicas看到eureka2的服务

 

    6)注册项目到HA注册中心

    只需要修改sms项目的application.yml中 defaultZone为 http://eureka1:1001/eureka/,http://eureka2:1002/eureka即可

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恐龙弟旺仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值