• SpringCloud初体验-使用Eureka进行服务注册和发现


    一、什么是SpringCloud

    spring cloud是微服务架构的一站式解决方案,包含了服务发现,服务注册等相关组件;spring cloud基于springboot,提供了一套简便的解决方案。

    1.1 Eureka的功能和作用

    Spring Cloud Eureka 是对Netflix公司的Eureka的二次封装,它实现了服务治理的功能,Spring Cloud Eureka提供服务端与客户端,服务端即是Eureka服务注册中心,客户端完成微服务向Eureka服务的注册与发现。

    二、项目基本架构

    (1)项目版本
    spring-boot-version:2.3.0.RELEASE
    spring-cloud.version:Hoxton.SR4
    接下来我们基于Eureka做一个简单的项目,来实现服务拆分和解耦,项目示意图如下:

    2.1 代码结构图

    根据上述示意图,我们先新建一个空的项目,然后创建三个不同的模块,分别对应Eureka-Server,服务提供者Provider,和服务消费者Consumer,项目如下;

    三、代码实现和验证

    3.1 编写Eureka-Server的代码和配置

    使用spring-initializr创建一个项目,包含eureka-server模块,如下:

    然后配置该项目作为服务中心,并启用服务@EnableEurekaServer,配置文件如下:

    server:
      port: 8761
    eureka:
      instance:
        hostname: eureka-server
      client:
        register-with-eureka: false
        fetch-registry: false
        service-url:
          defaultZone: http://localhost:8761/eureka/
    

    启动项目,然后打开浏览器8761端口中,查看我们的服务中心:

    服务中心以及可以正常运行了。

    3.2 编写Service Provider的代码和配置

    我们编写一个服务提供者,这个服务只提供售卖票业务;
    使用spring-initializr创建一个项目,包含eureka discover client模块,如下:

    编写一个接口,模拟售票服务,代码如下:

    @RestController()
    @RequestMapping(path = "/ticket")
    public class TicketController {
        @GetMapping(path = "/sell")
        public String sell() {
            return "《西游记》";
        }
    }
    

    将服务注册到服务中心,配置文件如下:

    spring:
      application:
        name: provider-ticket
    server:
      port: 8090
    eureka:
      instance:
        prefer-ip-address: true
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
    

    此时我们的服务以及注册到注册中心。

    3.3 编写Service Consumer的代码和配置

    (1) 作为服务的消费者,同样使用spring-initializr创建一个项目,包含eureka discover client模块,需要添加的模块和服务提供者相同,如下:

    (2) 添加一个配置文件注入RestTemplate,代码如下:

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

    (3) 使用RestTemplate消费服务
    编写一个简单的controller来模拟服务的调用,代码如下:

    @RestController
    @RequestMapping(path = "/buy")
    public class BuyTicketController {
    
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping(path = "/ticket")
        public String ticket() {
            String ticket = restTemplate.getForObject("http://PROVIDER-TICKET/ticket/sell", String.class);
            return "买到票了:" + ticket;
        }
    }
    

    (4) 启用服务发现@EnableDiscoveryClient,验证是否消费成功
    我们访问注册中心,可以看到服务提供者和消费者均按照服务名注册到服务中心了,如下图:

    访问消费者的接口,可以看到调用成功:

    四、总结

    1、Eureka-server可以做服务发现,服务提供者和服务消费者都要注册到该server上;
    2、通过上述的简单示例,我们学习了部分微服务的概念,并做了简单实践:
    服务发现:其实就是一个“中介”,整个过程中有三个角色:服务提供者(出租房子的)、服务消费者(租客)、服务中介(房屋中介)。
    服务提供者: 就是提供一些自己能够执行的一些服务给外界。
    服务消费者: 就是需要使用一些服务的“用户”。

  • 相关阅读:
    通过hmc启动lpar的终端
    修复LVM手记
    通过VMLibrary在client partition上安装AIX全程实录
    【转】通过VIOS实现AIX系统的网络虚拟化
    rhel 6 启动流程分析(/etc/inittab)
    Linux中tty、pty、pts的概念区别
    Shell中while循环的done 后接一个重定向<
    搭建dns服务器时报错error: bind: address already in use
    关于 smit mktcpip 和smit chinet 的区别
    博客园博客停更(本博客收集本人于2018年之前的博客,2018年之后的博客统一发布在CSDN上)
  • 原文地址:https://www.cnblogs.com/zqllove/p/13667835.html
Copyright © 2020-2023  润新知