zoukankan      html  css  js  c++  java
  • springcloud(七): 使用Feign调用Eureka Server客户端服务

             当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下,并且显得好傻。

    那么有没有更好的解决方案呢?答案是确定的有,Netflix已经为我们提供了一个框架:Feign。

    Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。

    而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Feign整合了Ribbon和Hystrix(关于Hystrix我们后面再讲),可以让我们不再需要显式地使用这两个组件。

    总起来说,Feign具有如下特性:

    • 可插拔的注解支持,包括Feign注解和JAX-RS注解;
    • 支持可插拔的HTTP编码器和解码器;
    • 支持Hystrix和它的Fallback;
    • 支持Ribbon的负载均衡;
    • 支持HTTP请求和响应的压缩。

    这看起来有点像我们springmvc模式的Controller层的RequestMapping映射。这种模式是我们非常喜欢的。Feign是用@FeignClient来映射服务的。

    代码案例如下:

    1. 选择项目类型

    2.创建类型

    3.选择项目中给我们产生的依赖

     4.选择工程名称和模块名称

     5.查看项目结构

    6.编辑pom.xml文件

    <dependencies>
            <dependency>
                <groupId>cn.kgc</groupId>
                <artifactId>eureka-common-school</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            <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-client</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>

    7.编写application.properties属性文件

    #eureka的相关配置
    #使用feign时报错Service id not legal hostname(xx_sss)
    #原因是feign不支持下划线"_",支持"-",改成xx-sss即可
    #spring.application.name表示当前微服务注册到Eureka Server中的名字,同事需要制定Eureka Server地址
    spring.application.name=client-classes-consumer
    server.port=8763
    eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

    8.在cn.kgc.feign包下创建feign服务调用接口

    package cn.kgc.feign;
    import cn.kgc.vo.Classes;
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.RequestMapping;
    import java.util.List;
    //FeignClient的name属性值和eureka_client_product的appliaction属性文件找那个的spring.application.name保持一致
    @FeignClient(name="client-school-provider")
    public interface ClassesFeign {
        //下面的调用接口标准要和eureka-client-provider中的controller请求方法必须保持一致
        @RequestMapping("/options.do")
        public List<Classes> optionsData();
    
    }

    9.编写控制类cn.kgc.controller包下ClassesController

    package cn.kgc.controller;
    
    import cn.kgc.feign.ClassesFeign;
    import cn.kgc.vo.Classes;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    @RestController
    public class ClassesController {
        @Autowired
        private ClassesFeign classesFeign;
    
        @RequestMapping("/showoptions.do")
        public List<Classes> showOptionsData(){
            return classesFeign.optionsData();
        }
    }

    10.开启启动类feign的注解

    package cn.kgc;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.cloud.openfeign.EnableFeignClients;
    
    @EnableFeignClients
    @EnableEurekaClient
    @SpringBootApplication
    public class EurekaClientConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaClientConsumerApplication.class, args);
        }
    
    }

    11.先启动,eureka-server服务端,再启动eureka-client-provider 提供者,再启动调用者eureka-client-consumer

    服务器端检测到的客户端注册信息

    访问客户端提供者的数据

     

    使用feign访问客户端提供者的数据

     

    全部拿到数据了,后续有问题请直接找我:QQ:964918306

    此帖子为原创

    作者:红酒人生

    转载请注明出处:https://www.cnblogs.com/holly8/p/11016983.html

  • 相关阅读:
    创建Azure虚拟机之Azure Portal方式
    Windows平台启动与关闭Azure虚拟机
    Linux文件操作命令
    vue中使用图片裁剪cropperjs
    Linux权限管理之基本权限
    设计模式6大原则之【迪米特原则】
    设计模式6大原则之【接口隔离原则】
    设计模式6大原则之【单一职责原则】
    sql中的join
    Redis学习之:Redis的使用和优化
  • 原文地址:https://www.cnblogs.com/holly8/p/11016983.html
Copyright © 2011-2022 走看看