【读书笔记】3.0服务治理Spring Cloud Eureka

初识Eureka

  • Spring Cloud Eureka是Spring Cloud Netflix套件的一个组件,基于Netflix Eureka做了二次开发
  • 为什么需要服务治理?微服务会越来越多,集群规模、服务位置、服务命名都会发生变化,很难通过静态配置来手工维护大量的微服务实例(想想Zookeeper是怎么配置实例的),我们需要解决微服务架构中的服务实例维护问题。
  • Eureka包含了服务端组件(注册中心)和客户端组件(生产者、消费者),也是通过心跳来更新服务

本章核心内容

  • 搭建注册中心
  • 服务注册和发现
  • Eureka的基础架构(后续)
  • Eureka的服务治理机制(后续)
  • Eureka的配置(后续)

搭建注册中心

  1. 引入依赖spring-cloud-starter-eureka-server
  2. 在SpringBoot启动类上贴上@EnableEurekaServer,表明这是一个服务注册中心
  3. 配置application.properties
    # 应用名
    spring.application.name=eureka-server
    # 主机名
    eureka.instance.hostname=peer1
    # 启动端口
    server.port=1111
    # 不向注册中心注册自己
    eureka.client.register-with-eureka=false
    # 不需要检索
    eureka.client.fetch-registry=false
    # 注册中心地址
    eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka
    # 本地调试时关闭保护机制
    eureka.server.enable-self-preservation=false

服务注册

创建一个生产者

  1. 引入spring-cloud-starter-eureka
  2. 在SpringBoot启动类上贴上@EnableDiscoveryClient,表明这是一个客户端
  3. 配置application.properties
    # 应用名
    spring.application.name=hello-service
    # 端口
    server.port=8081
    # 注册中心地址
    eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka
  4. 创建一个Controller
    @Autowired
    private DiscoveryClient discoveryClient;

    /** 注意,如果是POST方式且形参是对象,那么需要在参数列表内添加@ResponseBody */
    @PostMapping("/hello")
    public String hello(String message) {
        ServiceInstance instance = discoveryClient.getLocalServiceInstance();
        logger.info("message:{}, instance:{}", message, instance.toString());
        return "Hi";
    }

服务注册注册成功后,控制台会输出status 204
这里写图片描述
以及注册中心显示服务实例
这里写图片描述

创建一个消费者

  1. 与服务注册的1,2,3相同,注意修改应用名和端口,区分
  2. 在启动类里注册一个Bean
    @Bean@LoadBalanced
    public RestTemplate restTemplate() {return new RestTemplate();}

创建一个Controller

    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/demo")
    public String hello(String message) {
        String result = restTemplate.postForObject(
                "http://HELLO-SERVICE/hello?message={1}",
                "hello",
                String.class,
                message);
        return result;
    }

附:eureka实例

猜你喜欢

转载自blog.csdn.net/coder1994/article/details/80618013