IT小栈

  • 主页
  • Java基础
  • RocketMQ
  • Kafka
  • Redis
  • Shiro
  • Spring
  • Spring Boot
  • Spring Cloud
  • 资料链接
  • 关于
所有文章 友链

IT小栈

  • 主页
  • Java基础
  • RocketMQ
  • Kafka
  • Redis
  • Shiro
  • Spring
  • Spring Boot
  • Spring Cloud
  • 资料链接
  • 关于

springcloud:注册中心Eureka

2019-10-28

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

1、简介

Eureka包含两个组件:Eureka Server和Eureka Client。

调用关系说明:

1.服务提供者在启动时,向注册中心注册自己提供的服务。
2.服务消费者在启动时,向注册中心订阅自己所需的服务。
3.注册中心返回服务提供者地址给消费者。
4.服务消费者从提供者地址中调用消费者。
注意! 下面的服务端指:注册中心,客户端指:服务提供者和消费者

Eureka Server:提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,包括主机与端口号、服务版本号、通讯协议等。这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka服务端支持集群模式部署,首尾相连形成一个闭环即可,集群中的的不同服务注册中心通过异步模式互相复制各自的状态,这也意味着在给定的时间点每个实例关于所有服务的状态可能存在不一致的现象。

eureka客户端,主要处理服务的注册和发现。客户端服务通过注册和参数配置的方式,嵌入在客户端应用程序的代码中。在应用程序启动时,Eureka客户端向服务注册中心注册自身提供的服务,并周期性的发送心跳来更新它的服务租约。同时,他也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期行的刷新服务状态,默认是30秒更新一次,可以配置。

服务调用
服务消费者在获取服务清单后,通过服务名可以获取具体提供服务的实例名和该实例的元数据信息。因为有这些服务实例的详细信息,所以客户端可以根据自己的需要决定具体调用哪个实例,在Ribbon中会默认采用轮询的方式进行调用,从而实现客户端的负载均衡。

在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒

如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)

Eureka Server在运行期间会统计15分钟内服务心跳失败的比例,低于85%将会把注册的服务实例保护起来,这些实例不会过期,那么客户端可能获取的服务实例调用失败,客户端必须要有容错机制,请求重试、断路器等

2、搭建服务注册中心

我们通过Maven方式构建,通过父工程引入Spring Cloud 相关的基础包及相关的版本的定义。请参照

项目地址:https://github.com/mingxungu/zxgk-microservices/tree/master/zxgk-eureka

2.1、pom文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<parent>
<artifactId>zxgk-parent</artifactId>
<groupId>cn.com.pingtech</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>zxgk-eureka</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<description>Eureka server</description>


<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

2.2、编写启动类

1
2
3
4
5
6
7
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}

2.3、编写配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
spring.application.name=eureka

# server (eureka 默认端口为:8761)
server.port=8761

# 是否注册到eureka(eureka本身是不需要再注册到自己的)
eureka.client.register-with-eureka=false
# 是否从eureka获取注册信息
eureka.client.fetch-registry=false
# eureka服务器的地址(注意:地址最后面的 /eureka/ 这个是固定值)
eureka.client.service-url.defaultZone=http://127.0.0.1:${server.port}/eureka/
#关闭自我保护模式(默认打开true)
#15分钟内心跳失败比例低于85%,注册中心的服务实例会被保护起来,不会过期,可能导致客户端调用失败
eureka.server.enable-self-preservation=false

2.4、启动服务

访问:http://127.0.0.1:8761/

3、搭建服务提供者

项目地址:

https://github.com/mingxungu/zxgk-microservices/tree/master/zxgk-examples/zxgk-eureka-producer-simple

https://github.com/mingxungu/zxgk-microservices/tree/master/zxgk-examples/zxgk-eureka-producer-simple1

3.1、pom文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<parent>
<artifactId>zxgk-examples</artifactId>
<groupId>cn.com.pingtech</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>zxgk-eureka-producer-simple1</artifactId>

<dependencies>

<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.0</version>
</dependency>

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

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

</dependencies>

3.2、编写启动类

1
2
3
4
5
6
7
8
@SpringBootApplication
@EnableEurekaClient
public class EurekaProducerApplication {

public static void main(String[] args) {
SpringApplication.run(EurekaProducerApplication.class, args);
}
}

3.3、编写测试类

1
2
3
4
5
6
7
@RestController
public class TestController {
@RequestMapping("/hello")
public String hello() {
return "hello this is zxgk-eureka-producer-simple";
}
}

3.4、编写配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
spring.application.name=zxgk-producer
server.port=9010

# 客户端在注册时就会使用自己的ip地址而不是主机名(客户端自身加)
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
#当前服务实例注册到服务中心,默认是true
eureka.client.register-with-eureka=true
#是否需要去检索寻找服务,默认是true
eureka.client.fetch-registry=true
#renew频率,向Eureka服务发送renew信息,默认30秒
eureka.instance.lease-renewal-interval-in-seconds=30

# eureka
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

management.endpoints.web.exposure.include=*

3.5、启动服务

启动了两个实例,只是端口不同其他配置都一样,访问:http://127.0.0.1:8761/

4、编写服务消费者

项目地址:https://github.com/mingxungu/zxgk-microservices/tree/master/zxgk-examples/zxgk-eureka-consumer-ribbon-simple

4.1、pom文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<parent>
<artifactId>zxgk-examples</artifactId>
<groupId>cn.com.pingtech</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>zxgk-eureka-producer-simple1</artifactId>

<dependencies>

<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.0</version>
</dependency>

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

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

</dependencies>

4.2、编写启动类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@EnableEurekaClient
@SpringBootApplication
public class RibbonConsumerApplication {

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}

public static void main(String[] args) {
SpringApplication.run(RibbonConsumerApplication.class, args);
}

}

4.3、编写测试类

1
2
3
4
5
6
7
8
9
10
11
12
@RestController
public class TestController {

@Autowired
RestTemplate restTemplate;

@RequestMapping("/hi")
public String hello(){
return restTemplate.getForObject("http://ZXGK-PRODUCER/hello", String.class);
}

}

4.4、编写配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server.port=9020

spring.application.name=zxgk-consumer-ribbon
#eureka.client.service-url.defaultZone=http://127.0.0.1:8000/eureka/
# 启用ip配置 这样在注册中心列表中看见的是以ip+端口呈现的
eureka.instance.prefer-ip-address=true
# 实例名称 最后呈现地址:ip:2000
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}

#监控-》eureka
eureka.instance.leaseRenewalIntervalInSeconds=10
eureka.instance.health-check-url-path=/actuator/health
eureka.client.registryFetchIntervalSeconds=5
eureka.client.service-url.defaultZone=${EUREKA_SERVICE_URL:http://127.0.0.1:8000}/eureka/

management.endpoints.web.exposure.include=*

4.5、启动消费者

浏览器访问测试:

本文作者: 顾 明 训
本文链接: https://www.itzones.cn/2019/10/28/springcloud-注册中心Eureka/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
  • springCloud
  • Eureka
  • springCloud

扫一扫,分享到微信

微信分享二维码
Kafka安装部署
为什么使用SpringCloud - 分析架构演进过程
  1. 1. 1、简介
  2. 2. 2、搭建服务注册中心
    1. 2.1. 2.1、pom文件
    2. 2.2. 2.2、编写启动类
    3. 2.3. 2.3、编写配置文件
    4. 2.4. 2.4、启动服务
  3. 3. 3、搭建服务提供者
    1. 3.1. 3.1、pom文件
    2. 3.2. 3.2、编写启动类
    3. 3.3. 3.3、编写测试类
    4. 3.4. 3.4、编写配置文件
    5. 3.5. 3.5、启动服务
  4. 4. 4、编写服务消费者
    1. 4.1. 4.1、pom文件
    2. 4.2. 4.2、编写启动类
    3. 4.3. 4.3、编写测试类
    4. 4.4. 4.4、编写配置文件
    5. 4.5. 4.5、启动消费者
© 2020 IT小栈
载入天数...载入时分秒... || 本站总访问量次 || 本站访客数人次
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链

tag:

  • jvm
  • Java基础
  • kafka HW
  • kafka Leader Epoch
  • kafka
  • kafka位移主题
  • kafka位移提交
  • kafka副本机制
  • kafka ISR
  • zookeeper
  • kafka消息丢失
  • kafka日志存储
  • kafka Log Clean
  • kafka Log Compaction
  • kafka消费位移设置
  • kafka Rebalance
  • kafka分区算法
  • kafka生产者拦截器
  • kafka SASL/SCRAM
  • kafka ACL
  • redis
  • redis Ziplist
  • redis Hashtable
  • redis LinkedList
  • redis QuickList
  • redis intset
  • redis String
  • redis SDS
  • redis SkipList
  • redisDb
  • redisServer
  • redis 简介
  • Redis Cluster
  • 主从同步
  • RocketMQ高可用HA
  • 事务消息
  • 内存映射
  • MMAP
  • 同步刷盘
  • 异步刷盘
  • 消息存储文件
  • RocketMQ安装
  • 延迟消息
  • RocketMQ入门
  • 推拉模式
  • PushConsumer
  • 消费结果处理
  • rebalance
  • RocketMQ权限控制
  • RocketMQ ACL
  • 消息过滤
  • 消息重试
  • 消费位置
  • 集群消费
  • 广播消费
  • 运维命令
  • shiro源码分析
  • shiro入门
  • IOC和DI
  • Spring创建Bean
  • Bean生命周期
  • Sping属性注入
  • 异常
  • SpringMVC
  • springCloud
  • Eureka

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 我的OSCHINA
  • 我的CSDN
  • 我的GITHUB
  • 一生太水