Eureka客户端-服务消费者(Feign)

1、pom.xml

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR1</spring-cloud.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <!--客户端只有当我们有了这个依赖之后,才能有那些状态页面的查看,否则会报ErrorPage-->
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>

注意:spring-boot-starter-web依赖必须要有,如果没有的话,会报错

feign的依赖在Finchley版本已经需要使用openfeign,不再是之前的依赖。

2、application.yml

spring:
  application:
    name: eureka-client-consumer-feign
server:
  port: 8603
eureka:
  instance:
    prefer-ip-address: true
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

3、代码测试

(1)服务提供者部分代码

    @Value("${server.port}")
    private String port;
    @RequestMapping("/getUUid/{i}")
    public String getUUid(@PathVariable("i") Integer i){
        UUID uuid = UUID.randomUUID();
        String s = i + "==="+uuid.toString();
        return s;
    }

    @RequestMapping("/getParam")
    public String getParam(@RequestBody String param){
        return param;
    }

    @RequestMapping("/getServerPort")
    public String getServerPort(){
        return port;
    }

(2)feign客户端代码

a、启动类代码


@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class EurekaClientCustomerFeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientCustomerFeignApplication.class, args);
    }
}

b、feign接口代码

@FeignClient("eureka-client-provider")
public interface StoreClient {
    @RequestMapping(method = RequestMethod.POST,value = "/getUUid/{i}")
    public String getUUid(@PathVariable("i") Integer i);

    @RequestMapping("/getParam")
    public String getParam(String param);
}

注:在@FeignClient下不能使用@GetMappingz这些合成注解,@PathVariable中需要设置值不能省略

c、feign提供服务的代码

 @Autowired
    StoreClient storeClient;
    @RequestMapping("/getResult")
    public String getResult(){
        String uUid = storeClient.getUUid(3);
        return uUid;
    }

    @RequestMapping("getParamTest")
    public String getParamTest(){
        String ceshi = storeClient.getParam("你好");
        return ceshi;
    }

注:

     访问返回结果是:

也就是说,我们要携带参数的话,地址栏是可以的。如果要在方法参数中携带参数,那么我们就需要使用@RequestBody的注解。

4、和ribbon一样,feign同样能够覆盖默认的配置

修改的代码:

@FeignClient(name="eureka-client-provider",configuration = FootConfigration.class)
public interface StoreClient {
    @RequestLine("GET /getUUid/{i}")
    public String getUUid(@PathVariable("i") Integer i);

    @RequestLine("POST /getParam")
    public String getParam(String param);
}

注:请求部分的注解必须要使用feign自己的注解,不能再使用springmvc的注解,否则就会报错

修改配置的代码:

@Configuration
public class FootConfigration {
    @Bean
    public Contract feignContract() {
        return new feign.Contract.Default();
    }
}

注:这个配置类不能放在启动类的扫描范围之下,否则将会全局起作用。

在中文文档中有针对于哪些配置可以进行更改进行了罗列:

猜你喜欢

转载自blog.csdn.net/weixin_42152604/article/details/85097307
今日推荐