[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/BlueCatPro/JiyongG-code.github.io/master/feign.html [Back]  [Original]

Feign | Ji`s Blog

Feign

Feign

RestTemplate

image-20210714174814204 [image-20210714174814204]

URL

Feignhttphttps://github.com/OpenFeign/feign

http

image-20210714174918088 [image-20210714174918088]

FeignRestTemplate

Fegin

1

order-servicepomfeign

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2

order-serviceFeign

image-20210714175102524 [image-20210714175102524]

3Feign

order-service

package cn.itcast.order.client;

import cn.itcast.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient("userservice")
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

SpringMVC

  • userservice
  • GET
  • /user/{id}
  • Long id
  • User

FeignhttpRestTemplate

4

order-serviceOrderServicequeryOrderByIdFeignRestTemplate

image-20210714175415087 [image-20210714175415087]

5

Feign

@EnableFeignClients

FeignClient

FeignClientRestTemplate

2.2.

Feign

feign.Logger.Level NONEBASICHEADERSFULL
feign.codec.Decoder httpjsonjava
feign.codec.Encoder http
feign. Contract SpringMVC
feign. Retryer Ribbon

@BeanBean

2.2.1.

feign

feign:  
  client:
    config: 
      userservice: # 
        loggerLevel: FULL #   

feign:  
  client:
    config: 
      default: # default
        loggerLevel: FULL #   

  • NONE
  • BASICURL
  • HEADERSBASIC
  • FULL

2.2.2.Java

JavaLogger.Level

public class DefaultFeignConfiguration  {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.BASIC; // BASIC
    }
}

@EnableFeignClients

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .class) 

@FeignClient

@FeignClient(value = "userservice", configuration = DefaultFeignConfiguration .class) 

2.3.Feign

Feignhttp

URLConnection

Apache HttpClient

OKHttp

FeignURLConnection

ApacheHttpClient

1

order-servicepomApacheHttpClient

<!--httpClient -->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

2

order-serviceapplication.yml

feign:
  client:
    config:
      default: # default
        loggerLevel: BASIC # BASIC
  httpclient:
    enabled: true # feignHttpClient
    max-connections: 200 # 
    max-connections-per-route: 50 # 

FeignClientFactoryBeanloadBalance

image-20210714185925910 [image-20210714185925910]

Debugorder-serviceclientApache HttpClient

image-20210714190041542 [image-20210714190041542]

Feign

1.basic

2.HttpClientOKHttpURLConnection

feign-httpClient

httpClient

2.4.

Feigncontroller

feign

image-20210714190542730 [image-20210714190542730]

UserController

image-20210714190528450 [image-20210714190528450]

2.4.1.

1APISpringMVC

2FeignController

image-20210714190640857 [image-20210714190640857]

  • Controller

2.4.2.

FeignClientPOJOFeign

UserClientUserFeignfeign-api

image-20210714214041796 [image-20210714214041796]

2.4.3.

1

modulefeign-api

image-20210714204557771 [image-20210714204557771]

image-20210714204656214 [image-20210714204656214]

feign-apifeignstarter

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

order-serviceUserClientUserDefaultFeignConfigurationfeign-api

image-20210714205221970 [image-20210714205221970]

2order-servicefeign-api

order-serviceUserClientUserDefaultFeignConfiguration

order-servicepomfeign-api

<dependency>
    <groupId>cn.itcast.demo</groupId>
    <artifactId>feign-api</artifactId>
    <version>1.0</version>
</dependency>

order-servicefeign-api

3

image-20210714205623048 [image-20210714205623048]

UserClientcn.itcast.feign.clients

order-service@EnableFeignClientscn.itcast.orderUserClient

4

Feign

@EnableFeignClients(basePackages = "cn.itcast.feign.clients")

Client

@EnableFeignClients(clients = {UserClient.class})

Feign

FeignSpring Securitytoken

@HeadersAuthorizationSpring Security

@FeignClient(name = "service-provider")
public interface UserFeignClient {
    @RequestLine("GET /api/users/{id}")
    @Headers("Authorization: {token}")
    User getUserById(@Param("id") Long id, @Param("token") String token);
}

OpenFeign

package feign;

/**
 * . 
 * Targetapply(RequestTemplate)http 
 * Clientexecute(Request, feign.Request.Options)
 *
 * rest    
 * apply(RequestTemplate)/path/{foo}/barfoo
 * RequestInterceptor.intercept() 
 * 
 */
public interface RequestInterceptor {

  /**
   * RequestTemplate
   */
  void apply(RequestTemplate template);
}

RequestInterceptorapply

package com.example.rtbootconsumer.config.interceptor;

import com.example.rtbootconsumer.common.utils.TraceIdUtil;
import feign.Request;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Configuration;

/**
 * @Description Feign
 **/
@Configuration
public class FeignRequestInterceptor implements RequestInterceptor {

    /**
     * @description: traceId
     */
    @Override
    public void apply(RequestTemplate template) {
        String traceId = TraceIdUtil.getTraceId();
        if (StringUtils.isNotEmpty(traceId)) {
            template.header("traceId", traceId);
        }
    }
}

+@FeignClientconfiguration

package com.example.rtbootconsumer.config.interceptor;

import com.example.rtbootconsumer.common.utils.TraceIdUtil;
import feign.Request;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Configuration;

/**
 * @Description Feign
 **/
public class FeignRequestInterceptor implements RequestInterceptor {

    /**
     * @description: traceId
     */
    @Override
    public void apply(RequestTemplate template) {
        String traceId = TraceIdUtil.getTraceId();
        if (StringUtils.isNotEmpty(traceId)) {
            template.header("traceId", traceId);
        }
    }
}
package com.example.rtbootconsumer.feignservice;

import com.example.rtbootconsumer.pojo.User;
import com.example.rtbootconsumer.vo.ResultBody;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@FeignClient(name = "service-provider", path = "/testComm", url = "${addr.url}",configuration = FeignRequestInterceptor.class)
public interface UserFeignService {

    @PostMapping(value = "/getUser")
    public ResultBody<User> getUser(@RequestBody User user);
}

FeignRequestInterceptor2testlalala

package com.example.rtbootconsumer.config.interceptor;

import com.example.rtbootconsumer.common.utils.TraceIdUtil;
import feign.Request;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Configuration;

/**
 * @Description Feign
 **/
@Configuration
public class FeignRequestInterceptor2 implements RequestInterceptor {

    /**
     * @description: test
     */
    @Override
    public void apply(RequestTemplate template) {
        String traceId = TraceIdUtil.getTraceId();
        if (StringUtils.isNotEmpty(traceId)) {
            template.header("test", "lalala");
        }
    }
}

@FeignClientconfigurationclass

package com.example.rtbootconsumer.feignservice;

import com.example.rtbootconsumer.pojo.User;
import com.example.rtbootconsumer.vo.ResultBody;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@FeignClient(name = "service-provider", path = "/testComm", url = "${addr.url}",configuration = {FeignRequestInterceptor.class,FeignRequestInterceptor2.class})
public interface UserFeignService {

    @PostMapping(value = "/getUser")
    public ResultBody<User> getUser(@RequestBody User user);

    @PostMapping(value = "/testList")
    public ResultBody<List<User>> testList(@RequestBody List<User> list);
}


@FeignClientconfigurationconfiguration
@FeignClientconfiguration {FeignRequestInterceptor.class,FeignRequestInterceptor2.class})FeignRequestInterceptorFeignRequestInterceptor2 {FeignRequestInterceptor2.class,FeignRequestInterceptor.class})FeignRequestInterceptor2FeignRequestInterceptor


 
Kafka [Kafka] Kafka
Kafka
2023-03-23 Message Queue
 
Gateway [Gateway] Gateway
Gateway
2023-03-23 SpringCloud
  
© 2020 Ji. All Rights Reserved.   :  195.7k .
PoweredHexo
HostedGitHub & Coding
DNSTencent cloud
CDNjsDelivr
ThemeMatery
BY-NC-SA 4.0
Link996.ICU
UV
PV
WordCount195.7k

Web Proxy Viewer  |  New URL  |  Original Page