美文网首页
Spring Cloud 学习教程——第三篇:服务消费者(Rib

Spring Cloud 学习教程——第三篇:服务消费者(Rib

作者: 小强唐 | 来源:发表于2018-11-26 16:38 被阅读108次

    一、Ribbon 简介

    ribbon是一个负载均衡客户端,可以很好的控制http和tcp的一些行为。Feign默认集成了ribbon。

    二、准备工作

    启动 Eureka server。

    三、创建 Ribbon服务

    重新新建一个spring-boot工程,取名为:service-ribbon; 在它的pom.xml继承了父pom文件,并引入了以下依赖:


    image.png
    image.png image.png

    在工程的配置文件指定服务的注册中心地址为http://localhost:xxxx/eureka/,程序名称为 service-ribbon,程序端口为8772。配置文件application.yml如下:

    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:xxxx/eureka/
    server:
      port: 8772
    spring:
      application:
        name: service-ribbon
    

    在工程的启动类中,通过@EnableDiscoveryClient向服务中心注册;并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。

    @SpringBootApplication
    public class ServiceRibbonApplication {
    
        public static void main(String[] args) {
            SpringApplication.run( ServiceRibbonApplication.class, args );
        }
    
        @Bean
        @LoadBalanced
        RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
    }
    

    写一个测试类HelloService,通过之前注入ioc容器的restTemplate来消费service-hi服务的“/hi”接口,在这里我们直接用的程序名替代了具体的url地址,在ribbon中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名,代码如下:

    package com.mengmaedu.serviceribbon.test;
    
    import com.netflix.discovery.converters.Auto;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    /**
     * @Auther: Tangzhiqiang
     * @Date: 2018/11/26 17:09
     * @Description: 使用 ribbon调用 eureka client 接口(消费  eureka client)
     */
    @RestController
    public class TestEurekaClient {
    
        @Autowired
        private RestTemplate restTemplate;
    
    
        @GetMapping("/ribbon_test")
        public String test() {
            return restTemplate.getForObject("http://EUREKA-CLINET/test", String.class);
        }
    }
    

    在浏览器上多次访问http://127.0.0.1:8772/ribbon_test,浏览器交替显示:

    "测试 ribbon 使用"

    这说明当我们通过调用restTemplate.getForObject(....)方法时,已经做了负载均衡,访问了不同的端口的服务实例。

    四、Feign简介

    Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用feign注解。feign支持可插拔的编码器和解码器。feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。

    简而言之:

    • feign采用的是基于接口的注解
    • feign整合了ribbon,具有负载均衡的能力
    • 整合了Hystrix,具有熔断的能力

    创建 feign服务

    新建一个spring-boot工程,取名为service-feign,在它的 pom.xml 文件引入Feign的起步依赖spring-cloud-starter-feign、Eureka的起步依赖spring-cloud-starter-netflix-eureka-client、Web的起步依赖spring-boot-starter-web,如下:


    image.png image.png image.png

    在工程的配置文件application.yml文件,指定程序名为service-feign,端口号为8775,服务注册地址为http://localhost:8762/eureka/ ,代码如下:

    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8762/eureka/
    server:
      port: 8775
    spring:
      application:
        name: service-feign
    

    在程序的启动类ServiceFeignApplication ,加上@EnableFeignClients注解开启Feign的功能:

    @SpringBootApplication
    @EnableFeignClients
    public class ServiceFeignApplication {
    
        public static void main(String[] args) {
            SpringApplication.run( ServiceFeignApplication.class, args );
        }
    }
    

    定义一个feign接口,通过@ FeignClient(“服务名”),来指定调用哪个服务。比如在代码中调用了EUREKA-CLIENT 服务的“/test”接口,代码如下:

    @FeignClient(value = "EUREKA-CLIENT")
    public interface SchedualServiceHi {
        @RequestMapping(value = "/test",method = RequestMethod.GET)
        String sayHiFromClientOne();
    }
    

    在Web层的controller层,对外暴露一个”/test”的API接口,通过上面定义的Feign客户端SchedualServiceHi 来消费服务。代码如下:

    @RestController
    public class HiController {
    
        @Autowired
        SchedualServiceHi schedualServiceHi;
    
        @GetMapping(value = "/test")
        public String sayHi() {
            return schedualServiceHi.sayHiFromClientOne();
        }
    }
    

    启动程序,访问http://localhost:8775/test
    浏览器显示

    测试 ribbon 使用

    相关文章

      网友评论

          本文标题:Spring Cloud 学习教程——第三篇:服务消费者(Rib

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