微服务中的注册中心 Eureka

一、基础

1、角色:

(1)Eureka Server:服务注册中心(可以是一个集群),对外暴露自己的地址给每个微服务使用
(2)服务提供者:启动后向 EurekaServer注册自己信息(地址、服务名)
(3)服务消费者:向 EurekaServer订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
(4)心跳(续约):每个微服务定期通过 http方式向 EurekaServer刷新自己的状态

2、原理

(1)心跳机制:Client和 Server默认是 30s的周期心跳机制,Server默认 90s没收到则会进行移除

(2)自我保护:如果 15分钟内超过 85%的节点失效则进入保护机制(AP模式),可通过修改 配置进行关闭:

  • 服务端关闭自我保护:
# 服务端关闭自我保护
eureka.server.enable-self-preservation = false
  • 客户端修改心跳配置:
#修改心跳周期
eureka.instance.lease-renewal-interval-in-seconds = 30
#修改剔除时间
eureka.instance.lease-expiration-duration-in-seconds = 90

二、使用

1、服务端配置

  • 新建工程后,增加相应的依赖
<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
	</properties>
<dependencies>
    <!-- Eureka服务端 -->
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
	</dependency>
</dependencies>
<dependencyManagement>
		<dependencies>
            <!-- SpringCloud依赖,放到dependencyManagement中,起到管理版本的作用 -->
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
</dependencyManagement>
  • 项目启动类添加注解 @EnableEurekaServer

  • 增加配置
server:
  port: 8761 # 端口
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false # 是否注册自己的信息到EurekaServer,默认是true
    fetch-registry: false # 是否拉取其它服务的信息,默认是true
    service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要加上其它Server的地址。
      defaultZone: http://localhost:${server.port}/eureka

2、客户端配置

  • 增加客户端依赖
<!-- Eureka客户端 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 项目启动类增加注解 @EnableEurekaClient

  • 增加配置
spring:
  application:
    name: eureka-test # 应用名称,会在Eureka中显示
eureka:
  client:
    service-url: # EurekaServer地址
      defaultZone: http://localhost:8761/eureka
  instance:
    instance-id: lin-pc #主机名
    prefer-ip-address: true # 主机名显示ip,当调用getHostname获取实例的hostname时,返回ip而不是host名称
    ip-address: 127.0.0.1 # 指定自己的ip信息,不指定的话会自己寻找
  • 消费者调用接口代码
# @LoadBalanced 记得加,否则调用不到
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }


@RequestMapping("/restful")
    public Object restful(){
# 这里使用 提供者方注册进 eureka 的服务名来调用
        ResponseEntity<String> result = restTemplate.getForEntity("http://start-main-providerservice/provider", String.class);
        return result.getBody();
    }


 

3、集群配置

# eureka1,eureka2 需要在 host文件配置ip映射

# 服务端 eureka1配置
eureka:
	instance:
		# 集群下,在 host文件中配置映射
		hostname: eureka1
	client:
		register-with-eureka: false
		fetch-registry: false
		service-url:
			# 集群下配置
			defaultZone: http://eureka2:8761/eureka

# 服务端 eureka2配置
eureka:
	instance:
		# 集群下,在 host文件中配置映射
		hostname: eureka2
	client:
		register-with-eureka: false
		fetch-registry: false
		service-url:
			# 集群下配置
			defaultZone: http://eureka1:8761/eureka

# 客户端配置,只修改 defaultZone即可:
eureka:
  client:
    service-url:
        defaultZone: http://eureka1:8761/eureka,http://eureka2:8761/eureka

4、集群配置(三台)

# eureka1,eureka2,eureka3 需要在 host文件配置ip映射

# 服务端 eureka配置
eureka:
	instance:
		# 集群下,在 host文件中配置映射(xxxx 在三个服务分别是:eureka1、eureka2、eureka3)
		hostname: xxxx
	client:
		register-with-eureka: false
		fetch-registry: false
		service-url:
			# 集群下配置
			defaultZone: http://eureka1:8761/eureka,http://eureka2:8761/eureka,http://eureka3:8761/eureka

# 客户端配置,只修改 defaultZone即可:
eureka:
  client:
    service-url:
        defaultZone: http://eureka1:8761/eureka,http://eureka2:8761/eureka,http://eureka3:8761/eureka

5、增加监控

#引入 actuator
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

6、查看服务信息

# eureka 客户端启动类增加注解
@EnableDiscoveryClient

# eureka 客户端注入接口,通过该接口即可查看服务信息
@Autowired
private DiscoveryClient discoveryClient;

discoveryClient.getServices()
discoveryClient.getInstances("xxx")

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值