美文网首页
Spring Cloud 学习笔记(2) 服务治理 Eureka

Spring Cloud 学习笔记(2) 服务治理 Eureka

作者: 张云飞Vir | 来源:发表于2021-05-11 18:17 被阅读0次

    1. 背景

    我们开始学习 Eureka。

    2. 知识

    Eureka 是 Spring Cloud Netflix 微服务套件中的一部分。Netflix Eureka来实现服务注册与发现, 它包含了服务端和客户端组件。

    服务注册:在服务治理框架中, 通常都会构建一个注册中心, 每个服务单元向注册中心登记自己提供的服务, 将主机与端口号、 版本号、 通信协议等一些附加信息告知注册中心, 注册中心按服务名分类组织服务清单。

    服务发现: 由于服务间的调用不再通过具体地址来实现, 而是通过向服务名发起请求调用实现。调用方需要向服务注册中心咨询服务, 并 获取所有服务的实例清单, 以实现对具体服务实例的访问。

    • Eureka服务端,我们也称为服务注册中心
    • Eureka客户端,主要处理服务的注册与发现

    3. 示例

    示例是这样的。

    • 1、搭建服务注册中心
    • 2、搭建一个服务提供者,注册到上面的“注册中心”
    • 3、搭建一个服务使用者,调用 “服务提供者” 提供的 服务

    1) 搭建服务注册中心

    服务注册中心会维护一个“服务清单”,它记录了主机与端口号、 版本号、 通信协议等一些附加信息等。启动后的服务注册中心将等待 “服务提供者” 来注册。

    先创建项目,按下图。

    image.png

    修改配置文件 application.properties

    server.port=1111
    eureka.instance.hostname=localhost
    # 由于该应用为注册中心,所以设置 为 false, 代表不向注册中心注册自己。
    eureka.client.register-with-eureka=false
    # 由于注册中心的职责就是维护服务实例,它并不需要去检索服务, 所以也设置为 false
    eureka.client.fetch-registry=false
    eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
    

    2) 搭建一个服务提供者

    我们演示创建一个简单的微服务,访问 /hello 返回字符串。它将注册到上面搭建的 注册中心。

    先创建项目

    image.png

    这是,再次看出 eureka,可以看到已经注册成功

    image.png

    在完成了服务注册中心的搭建之后,接下将一个Spring Boot 应用加 入 Emeka 的服务治理体系中去。

    3.搭建高可用注册中心

    在微服务架构这样的分布式环境中, 我们需要充分考虑发生故障的情况, 所以在生产 环境中必须对各个组件进行高可用部署。

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

    示例
    我们将搭建 peer1 和 peer2 两个 Eureka,互相注册。一旦注册完毕后,它们之间将会互相同步。

    步骤1,第一个 Eureka 服务:peer1 的配置
    修改配置文件 application.properties

    server.port=1111
    spring.application.name=peerl1
    
    eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/
    

    步骤2,第二个 Eureka 服务:peer2 的配置
    修改配置文件 application.properties

    server.port=1112
    spring.application.name=peerl2
    
    eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
    

    步骤3,修改hosts 以看到效果

    127.0.0.1 peer1
    127.0.0.1 peer2
    

    步骤4,访问
    访问 http://localhost:1111/ 和,http://localhost:1112 都可以看到:

    image.png

    4.使用 ribbon 客户端负载均衡访问服务

    在上面例子的基础上,我们再加上一个 消费者,这里将创建一个 ribbonconsumer 工程,访问上面的 服务提供者。

    步骤1:先启动 服务提供者的两个实例

        java -jar hello-service.jar --server.port=8081
        java -jar hello-service.jar --server.port=8082
    
    

    步骤2:搭建一个消费者

    添加依赖:

    
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter'
        implementation 'org.springframework.boot:spring-boot-starter-web'
        implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }
    

    代码:

    /**
     * @description:
     * @author: zhangyunfei
     * @date: 2021/5/11 16:35
     */
    @RestController
    public class ReadController {
    
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
        @Autowired
        RestTemplate restTemplate;
    
        @RequestMapping(value = "/read", method = RequestMethod.GET)
        public String index() {
            return restTemplate.getForEntity("http://HELLO-SERVICE-1/hello", String.class).getBody();
        }
    
        private void log(String str) {
            System.out.println(str);
        }
    }
    
    

    配置文件:

    server.port=9001
    spring.application.name=ribbonconsumer
    eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
    

    步骤3:启动 消费者访问
    这时可以看到,每次访问的 “服务提供者的”实例是不一样的。

    image.png

    扩展

    我的实例代码地址:https://github.com/vir56k/demo/tree/master/eureka_demo3

    参考:

    《Spring Cloud微服务实战》
    https://docs.spring.io/spring-cloud-netflix/docs/current/reference/html/

    相关文章

      网友评论

          本文标题:Spring Cloud 学习笔记(2) 服务治理 Eureka

          本文链接:https://www.haomeiwen.com/subject/okggdltx.html