OpenFeign和feign使用簡介

1.OpenFeign簡介

Feign是一個聲明式的Web Service客戶端。它的出現使開發Web Service客戶端變得很簡單。使用Feign只需要創建一個接口加上對應的註解,比如:FeignClient註解。Feign有可插拔的註解,包括Feign註解和JAX-RS註解。
Feign也支持編碼器和解碼器,Spring Cloud Open Feign對Feign進行增強支持Spring MVC註解,可以像Spring Web一樣使用HttpMessageConverters等。
Feign是一種聲明式、模板化的HTTP客戶端。在Spring Cloud中使用Feign,可以做到使用HTTP請求訪問遠程服務,就像調用本地方法一樣的,開發者完全感知不到這是在調用遠程方法,更感知不到在訪問HTTP請求。

2.OpenFeign的功能

1.可插拔的註解支持,包括Feign註解和JAX-RS註解。
2.支持可插拔的HTTP編碼器和解碼器(Gson,Jackson,Sax,JAXB,JAX-RS,SOAP)。
3.支持Hystrix和它的Fallback。
4.支持Ribbon的負載均衡。
5.支持HTTP請求和響應的壓縮。
6.靈活的配置:基於 name 粒度進行配置
7.支持多種客戶端:JDK URLConnection、apache httpclient、okhttp,ribbon)
8.支持日誌
9.支持錯誤重試
10.url支持佔位符
11.可以不依賴註冊中心獨立運行

3.POM.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.zhangsan</groupId>
    <artifactId>member-service-openfeign</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>member-service-openfeign</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR4</spring-cloud.version>
    </properties>

    <dependencies>
        <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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

4.application.yml文件配置

spring:
  application:
    name: member-service-openfeign

eureka:
  client:
    service-url:
      defaultZone:
        http://localhost:8761/eureka/

server:
  port: 7777
logging:
  level:
    ROOT: INFO
    #針對指定的類 設置輸出級別
    com.zhangsan.memberserviceopenfeign.client.*: debug
feign:
  client:
    config:
      default:
        loggerLevel: FULL
        #針對某個級別設置輸出級別(設置局部的優先級別是最高的)
      Book-service:
        loggerLevel: FULL

5.Java代碼塊編寫

BookService接口編寫

package com.zhangsan.memberserviceopenfeign.client;

import com.zhangsan.memberserviceopenfeign.entity.Book;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * @ClassName BookService
 * @Description TODO
 * @Author ZhangSan_Plus
 * @Date 2020/5/18 16:41
 * @Version 1.0
 **/
 //此處編寫需要通信的微服務名稱
@FeignClient(name = "Book-service")
//http://Book-service/find?sn=xx
//客戶端接口 完成接口和微服務的對應
public interface BookService {
	//當前GetMapping是獲取另一個微服務的具體控制器
    @GetMapping("/find")
    Book findBySn(@RequestParam("sn") String sn);
}

MemberServiceController控制器編寫

package com.zhangsan.memberserviceopenfeign.controller;

import com.zhangsan.memberserviceopenfeign.client.BookService;
import com.zhangsan.memberserviceopenfeign.entity.Book;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

/**
 * @ClassName MemberController
 * @Description TODO
 * @Author ZhangSan_Plus
 * @Date 2020/5/18 16:51
 * @Version 1.0
 **/
@Controller
public class MemberController {
	//把bookService注入到容器中去
    @Resource
    BookService bookService;
    @GetMapping("/getBook")
    @ResponseBody
    public String getBook(String sn){
        Book bySn = bookService.findBySn(sn);
        return bySn.getBookName()+bySn.getDesc()+bySn.getSn()+"圖書借閱成功";
    }
}

MemberServiceOpenfeignApplication啓動類編寫

package com.zhangsan.memberserviceopenfeign;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;


@SpringBootApplication
@EnableEurekaClient
//一定不要忘記添加這個註解
@EnableFeignClients
public class MemberServiceOpenfeignApplication {

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

}

效果圖
在這裏插入圖片描述

6.OpenFeign工作原理

在這裏插入圖片描述

7.OpenFeign通信日誌

· 基於SpringBoot的logback輸出,默認debug級別
· 設置項:feign.client.config.微服務id.loggerLevel
· 微服務id:default代表全局默認配置

通信日誌輸出格式:

1. NONE:不輸出任何通信日誌
2. BASIC:只包含URL,請求方法,狀態碼,執行時間
3. HEADERS:在BASIC基礎上額外包含請求和響應頭
4. FULL:包含請求與相應內容最完整的信息
注意:針對某個微服務設置了通信日誌輸出級別(那麼該輸出級別就爲最高級別也是最終級別)
在日常開發中可以使用FULL 一般推薦使用BASIC/HEADERS

application.yml配置OpenFegin通信日誌

spring:
  application:
    name: member-service-openfeign

eureka:
  client:
    service-url:
      defaultZone:
        http://localhost:8761/eureka/

server:
  port: 7777
logging:
  level:
    ROOT: INFO
    #針對指定的類 設置輸出級別
    com.zhangsan.memberserviceopenfeign.client.*: debug
feign:
  client:
    config:
      default:
        loggerLevel: FULL
        #針對某個級別設置輸出級別(設置局部的優先級別是最高的)
      Book-service:
        loggerLevel: FULL

控制檯輸出

"C:\Program Files\Java\jdk1.8.0_51\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:D:\IDEA\IntelliJ IDEA 2018.3.5\lib\idea_rt.jar=53064:D:\IDEA\IntelliJ IDEA 2018.3.5\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_51\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_51\jre\lib\rt.jar;E:\IDEA_DESTBOK\member-service-openfeign\target\classes;C:\Users\One\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.3.0.RELEASE\spring-boot-starter-web-2.3.0.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\boot\spring-boot-starter\2.3.0.RELEASE\spring-boot-starter-2.3.0.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\boot\spring-boot\2.3.0.RELEASE\spring-boot-2.3.0.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.3.0.RELEASE\spring-boot-autoconfigure-2.3.0.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.3.0.RELEASE\spring-boot-starter-logging-2.3.0.RELEASE.jar;C:\Users\One\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\One\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\One\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.13.2\log4j-to-slf4j-2.13.2.jar;C:\Users\One\.m2\repository\org\apache\logging\log4j\log4j-api\2.13.2\log4j-api-2.13.2.jar;C:\Users\One\.m2\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;C:\Users\One\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\One\.m2\repository\org\yaml\snakeyaml\1.26\snakeyaml-1.26.jar;C:\Users\One\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.3.0.RELEASE\spring-boot-starter-json-2.3.0.RELEASE.jar;C:\Users\One\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.11.0\jackson-databind-2.11.0.jar;C:\Users\One\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.11.0\jackson-datatype-jdk8-2.11.0.jar;C:\Users\One\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.11.0\jackson-datatype-jsr310-2.11.0.jar;C:\Users\One\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.11.0\jackson-module-parameter-names-2.11.0.jar;C:\Users\One\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.3.0.RELEASE\spring-boot-starter-tomcat-2.3.0.RELEASE.jar;C:\Users\One\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.35\tomcat-embed-core-9.0.35.jar;C:\Users\One\.m2\repository\org\glassfish\jakarta.el\3.0.3\jakarta.el-3.0.3.jar;C:\Users\One\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.35\tomcat-embed-websocket-9.0.35.jar;C:\Users\One\.m2\repository\org\springframework\spring-web\5.2.6.RELEASE\spring-web-5.2.6.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\spring-beans\5.2.6.RELEASE\spring-beans-5.2.6.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\spring-webmvc\5.2.6.RELEASE\spring-webmvc-5.2.6.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\spring-aop\5.2.6.RELEASE\spring-aop-5.2.6.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\spring-context\5.2.6.RELEASE\spring-context-5.2.6.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\spring-expression\5.2.6.RELEASE\spring-expression-5.2.6.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\cloud\spring-cloud-starter-netflix-eureka-client\2.2.2.RELEASE\spring-cloud-starter-netflix-eureka-client-2.2.2.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\cloud\spring-cloud-starter\2.2.2.RELEASE\spring-cloud-starter-2.2.2.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\cloud\spring-cloud-context\2.2.2.RELEASE\spring-cloud-context-2.2.2.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\security\spring-security-rsa\1.0.9.RELEASE\spring-security-rsa-1.0.9.RELEASE.jar;C:\Users\One\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.64\bcpkix-jdk15on-1.64.jar;C:\Users\One\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.64\bcprov-jdk15on-1.64.jar;C:\Users\One\.m2\repository\org\springframework\cloud\spring-cloud-netflix-hystrix\2.2.2.RELEASE\spring-cloud-netflix-hystrix-2.2.2.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.3.0.RELEASE\spring-boot-starter-aop-2.3.0.RELEASE.jar;C:\Users\One\.m2\repository\org\aspectj\aspectjweaver\1.9.5\aspectjweaver-1.9.5.jar;C:\Users\One\.m2\repository\org\springframework\cloud\spring-cloud-netflix-eureka-client\2.2.2.RELEASE\spring-cloud-netflix-eureka-client-2.2.2.RELEASE.jar;C:\Users\One\.m2\repository\com\netflix\eureka\eureka-client\1.9.17\eureka-client-1.9.17.jar;C:\Users\One\.m2\repository\org\codehaus\jettison\jettison\1.3.7\jettison-1.3.7.jar;C:\Users\One\.m2\repository\stax\stax-api\1.0.1\stax-api-1.0.1.jar;C:\Users\One\.m2\repository\com\netflix\netflix-commons\netflix-eventbus\0.3.0\netflix-eventbus-0.3.0.jar;C:\Users\One\.m2\repository\com\netflix\netflix-commons\netflix-infix\0.3.0\netflix-infix-0.3.0.jar;C:\Users\One\.m2\repository\commons-jxpath\commons-jxpath\1.3\commons-jxpath-1.3.jar;C:\Users\One\.m2\repository\joda-time\joda-time\2.3\joda-time-2.3.jar;C:\Users\One\.m2\repository\org\antlr\antlr-runtime\3.4\antlr-runtime-3.4.jar;C:\Users\One\.m2\repository\org\antlr\stringtemplate\3.2.1\stringtemplate-3.2.1.jar;C:\Users\One\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\One\.m2\repository\com\google\code\gson\gson\2.8.6\gson-2.8.6.jar;C:\Users\One\.m2\repository\org\apache\commons\commons-math\2.2\commons-math-2.2.jar;C:\Users\One\.m2\repository\com\netflix\archaius\archaius-core\0.7.6\archaius-core-0.7.6.jar;C:\Users\One\.m2\repository\com\google\guava\guava\28.2-android\guava-28.2-android.jar;C:\Users\One\.m2\repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;C:\Users\One\.m2\repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;C:\Users\One\.m2\repository\org\checkerframework\checker-compat-qual\2.5.5\checker-compat-qual-2.5.5.jar;C:\Users\One\.m2\repository\com\google\errorprone\error_prone_annotations\2.3.4\error_prone_annotations-2.3.4.jar;C:\Users\One\.m2\repository\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar;C:\Users\One\.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;C:\Users\One\.m2\repository\com\netflix\servo\servo-core\0.12.21\servo-core-0.12.21.jar;C:\Users\One\.m2\repository\com\sun\jersey\jersey-core\1.19.1\jersey-core-1.19.1.jar;C:\Users\One\.m2\repository\com\sun\jersey\jersey-client\1.19.1\jersey-client-1.19.1.jar;C:\Users\One\.m2\repository\com\sun\jersey\contribs\jersey-apache-client4\1.19.1\jersey-apache-client4-1.19.1.jar;C:\Users\One\.m2\repository\org\apache\httpcomponents\httpclient\4.5.12\httpclient-4.5.12.jar;C:\Users\One\.m2\repository\org\apache\httpcomponents\httpcore\4.4.13\httpcore-4.4.13.jar;C:\Users\One\.m2\repository\commons-codec\commons-codec\1.14\commons-codec-1.14.jar;C:\Users\One\.m2\repository\com\google\inject\guice\4.1.0\guice-4.1.0.jar;C:\Users\One\.m2\repository\javax\inject\javax.inject\1\javax.inject-1.jar;C:\Users\One\.m2\repository\aopalliance\aopalliance\1.0\aopalliance-1.0.jar;C:\Users\One\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.11.0\jackson-annotations-2.11.0.jar;C:\Users\One\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.11.0\jackson-core-2.11.0.jar;C:\Users\One\.m2\repository\com\netflix\eureka\eureka-core\1.9.17\eureka-core-1.9.17.jar;C:\Users\One\.m2\repository\com\fasterxml\woodstox\woodstox-core\5.2.1\woodstox-core-5.2.1.jar;C:\Users\One\.m2\repository\org\codehaus\woodstox\stax2-api\4.2\stax2-api-4.2.jar;C:\Users\One\.m2\repository\org\springframework\cloud\spring-cloud-starter-netflix-archaius\2.2.2.RELEASE\spring-cloud-starter-netflix-archaius-2.2.2.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\cloud\spring-cloud-netflix-ribbon\2.2.2.RELEASE\spring-cloud-netflix-ribbon-2.2.2.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\cloud\spring-cloud-netflix-archaius\2.2.2.RELEASE\spring-cloud-netflix-archaius-2.2.2.RELEASE.jar;C:\Users\One\.m2\repository\commons-configuration\commons-configuration\1.8\commons-configuration-1.8.jar;C:\Users\One\.m2\repository\commons-lang\commons-lang\2.6\commons-lang-2.6.jar;C:\Users\One\.m2\repository\org\springframework\cloud\spring-cloud-starter-netflix-ribbon\2.2.2.RELEASE\spring-cloud-starter-netflix-ribbon-2.2.2.RELEASE.jar;C:\Users\One\.m2\repository\com\netflix\ribbon\ribbon\2.3.0\ribbon-2.3.0.jar;C:\Users\One\.m2\repository\com\netflix\ribbon\ribbon-transport\2.3.0\ribbon-transport-2.3.0.jar;C:\Users\One\.m2\repository\io\reactivex\rxnetty-contexts\0.4.9\rxnetty-contexts-0.4.9.jar;C:\Users\One\.m2\repository\io\reactivex\rxnetty-servo\0.4.9\rxnetty-servo-0.4.9.jar;C:\Users\One\.m2\repository\io\reactivex\rxnetty\0.4.9\rxnetty-0.4.9.jar;C:\Users\One\.m2\repository\com\netflix\ribbon\ribbon-core\2.3.0\ribbon-core-2.3.0.jar;C:\Users\One\.m2\repository\com\netflix\ribbon\ribbon-httpclient\2.3.0\ribbon-httpclient-2.3.0.jar;C:\Users\One\.m2\repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;C:\Users\One\.m2\repository\com\netflix\netflix-commons\netflix-commons-util\0.3.0\netflix-commons-util-0.3.0.jar;C:\Users\One\.m2\repository\com\netflix\ribbon\ribbon-loadbalancer\2.3.0\ribbon-loadbalancer-2.3.0.jar;C:\Users\One\.m2\repository\com\netflix\netflix-commons\netflix-statistics\0.1.1\netflix-statistics-0.1.1.jar;C:\Users\One\.m2\repository\io\reactivex\rxjava\1.3.8\rxjava-1.3.8.jar;C:\Users\One\.m2\repository\org\springframework\cloud\spring-cloud-starter-loadbalancer\2.2.2.RELEASE\spring-cloud-starter-loadbalancer-2.2.2.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\cloud\spring-cloud-loadbalancer\2.2.2.RELEASE\spring-cloud-loadbalancer-2.2.2.RELEASE.jar;C:\Users\One\.m2\repository\io\projectreactor\reactor-core\3.3.5.RELEASE\reactor-core-3.3.5.RELEASE.jar;C:\Users\One\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\One\.m2\repository\io\projectreactor\addons\reactor-extra\3.3.3.RELEASE\reactor-extra-3.3.3.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.3.0.RELEASE\spring-boot-starter-cache-2.3.0.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\spring-context-support\5.2.6.RELEASE\spring-context-support-5.2.6.RELEASE.jar;C:\Users\One\.m2\repository\com\stoyanr\evictor\1.0.0\evictor-1.0.0.jar;C:\Users\One\.m2\repository\com\netflix\ribbon\ribbon-eureka\2.3.0\ribbon-eureka-2.3.0.jar;C:\Users\One\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\One\.m2\repository\com\thoughtworks\xstream\xstream\1.4.11.1\xstream-1.4.11.1.jar;C:\Users\One\.m2\repository\xmlpull\xmlpull\1.1.3.1\xmlpull-1.1.3.1.jar;C:\Users\One\.m2\repository\xpp3\xpp3_min\1.1.4c\xpp3_min-1.1.4c.jar;C:\Users\One\.m2\repository\org\springframework\cloud\spring-cloud-starter-openfeign\2.2.2.RELEASE\spring-cloud-starter-openfeign-2.2.2.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\cloud\spring-cloud-openfeign-core\2.2.2.RELEASE\spring-cloud-openfeign-core-2.2.2.RELEASE.jar;C:\Users\One\.m2\repository\io\github\openfeign\form\feign-form-spring\3.8.0\feign-form-spring-3.8.0.jar;C:\Users\One\.m2\repository\io\github\openfeign\form\feign-form\3.8.0\feign-form-3.8.0.jar;C:\Users\One\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\Users\One\.m2\repository\commons-io\commons-io\2.2\commons-io-2.2.jar;C:\Users\One\.m2\repository\org\springframework\cloud\spring-cloud-commons\2.2.2.RELEASE\spring-cloud-commons-2.2.2.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\security\spring-security-crypto\5.3.2.RELEASE\spring-security-crypto-5.3.2.RELEASE.jar;C:\Users\One\.m2\repository\io\github\openfeign\feign-core\10.7.4\feign-core-10.7.4.jar;C:\Users\One\.m2\repository\io\github\openfeign\feign-slf4j\10.7.4\feign-slf4j-10.7.4.jar;C:\Users\One\.m2\repository\io\github\openfeign\feign-hystrix\10.7.4\feign-hystrix-10.7.4.jar;C:\Users\One\.m2\repository\com\netflix\hystrix\hystrix-core\1.5.18\hystrix-core-1.5.18.jar;C:\Users\One\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.9\HdrHistogram-2.1.9.jar;C:\Users\One\.m2\repository\org\springframework\spring-core\5.2.6.RELEASE\spring-core-5.2.6.RELEASE.jar;C:\Users\One\.m2\repository\org\springframework\spring-jcl\5.2.6.RELEASE\spring-jcl-5.2.6.RELEASE.jar" com.zhangsan.memberserviceopenfeign.MemberServiceOpenfeignApplication

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.0.RELEASE)

2020-05-19 09:44:54.746  INFO 9612 --- [           main] c.z.m.MemberServiceOpenfeignApplication  : No active profile set, falling back to default profiles: default
2020-05-19 09:44:55.571  INFO 9612 --- [           main] o.s.cloud.context.scope.GenericScope     : BeanFactory id=93882a3d-cfb8-30b8-9985-5b57a8290773
2020-05-19 09:44:55.671  INFO 9612 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'com.zhangsan.memberserviceopenfeign.client.BookService' of type [org.springframework.cloud.openfeign.FeignClientFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-05-19 09:44:55.905  INFO 9612 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 7777 (http)
2020-05-19 09:44:55.914  INFO 9612 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-05-19 09:44:55.914  INFO 9612 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.35]
2020-05-19 09:44:56.089  INFO 9612 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-05-19 09:44:56.090  INFO 9612 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1322 ms
2020-05-19 09:44:56.343  WARN 9612 --- [           main] c.n.c.sources.URLConfigurationSource     : No URLs will be polled as dynamic configuration sources.
2020-05-19 09:44:56.343  INFO 9612 --- [           main] c.n.c.sources.URLConfigurationSource     : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2020-05-19 09:44:56.347  WARN 9612 --- [           main] c.n.c.sources.URLConfigurationSource     : No URLs will be polled as dynamic configuration sources.
2020-05-19 09:44:56.347  INFO 9612 --- [           main] c.n.c.sources.URLConfigurationSource     : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2020-05-19 09:44:56.460  INFO 9612 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-05-19 09:44:59.920  WARN 9612 --- [           main] ockingLoadBalancerClientRibbonWarnLogger : You already have RibbonLoadBalancerClient on your classpath. It will be used by default. As Spring Cloud Ribbon is in maintenance mode. We recommend switching to BlockingLoadBalancerClient instead. In order to use it, set the value of `spring.cloud.loadbalancer.ribbon.enabled` to `false` or remove spring-cloud-starter-netflix-ribbon from your project.
2020-05-19 09:44:59.988  INFO 9612 --- [           main] o.s.c.n.eureka.InstanceInfoFactory       : Setting initial instance status as: STARTING
2020-05-19 09:45:00.031  INFO 9612 --- [           main] com.netflix.discovery.DiscoveryClient    : Initializing Eureka in region us-east-1
2020-05-19 09:45:00.217  INFO 9612 --- [           main] c.n.d.provider.DiscoveryJerseyProvider   : Using JSON encoding codec LegacyJacksonJson
2020-05-19 09:45:00.217  INFO 9612 --- [           main] c.n.d.provider.DiscoveryJerseyProvider   : Using JSON decoding codec LegacyJacksonJson
2020-05-19 09:45:00.454  INFO 9612 --- [           main] c.n.d.provider.DiscoveryJerseyProvider   : Using XML encoding codec XStreamXml
2020-05-19 09:45:00.454  INFO 9612 --- [           main] c.n.d.provider.DiscoveryJerseyProvider   : Using XML decoding codec XStreamXml
2020-05-19 09:45:00.665  INFO 9612 --- [           main] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration
2020-05-19 09:45:02.033  INFO 9612 --- [           main] com.netflix.discovery.DiscoveryClient    : Disable delta property : false
2020-05-19 09:45:02.033  INFO 9612 --- [           main] com.netflix.discovery.DiscoveryClient    : Single vip registry refresh property : null
2020-05-19 09:45:02.033  INFO 9612 --- [           main] com.netflix.discovery.DiscoveryClient    : Force full registry fetch : false
2020-05-19 09:45:02.033  INFO 9612 --- [           main] com.netflix.discovery.DiscoveryClient    : Application is null : false
2020-05-19 09:45:02.033  INFO 9612 --- [           main] com.netflix.discovery.DiscoveryClient    : Registered Applications size is zero : true
2020-05-19 09:45:02.034  INFO 9612 --- [           main] com.netflix.discovery.DiscoveryClient    : Application version is -1: true
2020-05-19 09:45:02.034  INFO 9612 --- [           main] com.netflix.discovery.DiscoveryClient    : Getting all instance registry info from the eureka server
2020-05-19 09:45:02.208  INFO 9612 --- [           main] com.netflix.discovery.DiscoveryClient    : The response status is 200
2020-05-19 09:45:02.212  INFO 9612 --- [           main] com.netflix.discovery.DiscoveryClient    : Starting heartbeat executor: renew interval is: 30
2020-05-19 09:45:02.215  INFO 9612 --- [           main] c.n.discovery.InstanceInfoReplicator     : InstanceInfoReplicator onDemand update allowed rate per min is 4
2020-05-19 09:45:02.220  INFO 9612 --- [           main] com.netflix.discovery.DiscoveryClient    : Discovery Client initialized at timestamp 1589852702219 with initial instances count: 4
2020-05-19 09:45:02.221  INFO 9612 --- [           main] o.s.c.n.e.s.EurekaServiceRegistry        : Registering application MEMBER-SERVICE-OPENFEIGN with eureka with status UP
2020-05-19 09:45:02.221  INFO 9612 --- [           main] com.netflix.discovery.DiscoveryClient    : Saw local status change event StatusChangeEvent [timestamp=1589852702221, current=UP, previous=STARTING]
2020-05-19 09:45:02.224  INFO 9612 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_MEMBER-SERVICE-OPENFEIGN/ZhangSan-Plus:member-service-openfeign:7777: registering service...
2020-05-19 09:45:02.263  INFO 9612 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 7777 (http) with context path ''
2020-05-19 09:45:02.266  INFO 9612 --- [           main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 7777
2020-05-19 09:45:02.275  INFO 9612 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_MEMBER-SERVICE-OPENFEIGN/ZhangSan-Plus:member-service-openfeign:7777 - registration status: 204
2020-05-19 09:45:04.087  INFO 9612 --- [           main] c.z.m.MemberServiceOpenfeignApplication  : Started MemberServiceOpenfeignApplication in 13.802 seconds (JVM running for 16.465)
2020-05-19 09:45:07.147  INFO 9612 --- [nio-7777-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-05-19 09:45:07.147  INFO 9612 --- [nio-7777-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-05-19 09:45:07.155  INFO 9612 --- [nio-7777-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 7 ms
2020-05-19 09:45:07.200 DEBUG 9612 --- [nio-7777-exec-1] c.z.m.client.BookService                 : [BookService#findBySn] ---> GET http://Book-service/find?sn=111 HTTP/1.1
2020-05-19 09:45:07.201 DEBUG 9612 --- [nio-7777-exec-1] c.z.m.client.BookService                 : [BookService#findBySn] ---> END HTTP (0-byte body)
2020-05-19 09:45:07.414  INFO 9612 --- [nio-7777-exec-1] c.netflix.config.ChainedDynamicProperty  : Flipping property: Book-service.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2020-05-19 09:45:07.457  INFO 9612 --- [nio-7777-exec-1] c.n.u.concurrent.ShutdownEnabledTimer    : Shutdown hook installed for: NFLoadBalancer-PingTimer-Book-service
2020-05-19 09:45:07.458  INFO 9612 --- [nio-7777-exec-1] c.netflix.loadbalancer.BaseLoadBalancer  : Client: Book-service instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=Book-service,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null
2020-05-19 09:45:07.469  INFO 9612 --- [nio-7777-exec-1] c.n.l.DynamicServerListLoadBalancer      : Using serverListUpdater PollingServerListUpdater
2020-05-19 09:45:07.504  INFO 9612 --- [nio-7777-exec-1] c.netflix.config.ChainedDynamicProperty  : Flipping property: Book-service.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2020-05-19 09:45:07.505  INFO 9612 --- [nio-7777-exec-1] c.n.l.DynamicServerListLoadBalancer      : DynamicServerListLoadBalancer for client Book-service initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=Book-service,current list of Servers=[ZhangSan-Plus:8888],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone;	Instance count:1;	Active connections count: 0;	Circuit breaker tripped count: 0;	Active connections per server: 0.0;]
},Server stats: [[Server:ZhangSan-Plus:8888;	Zone:defaultZone;	Total Requests:0;	Successive connection failure:0;	Total blackout seconds:0;	Last connection made:Thu Jan 01 08:00:00 CST 1970;	First connection made: Thu Jan 01 08:00:00 CST 1970;	Active Connections:0;	total failure count in last (1000) msecs:0;	average resp time:0.0;	90 percentile resp time:0.0;	95 percentile resp time:0.0;	min resp time:0.0;	max resp time:0.0;	stddev resp time:0.0]
]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@1c66fbc0
2020-05-19 09:45:07.590 DEBUG 9612 --- [nio-7777-exec-1] c.z.m.client.BookService                 : [BookService#findBySn] <--- HTTP/1.1 200 (390ms)
2020-05-19 09:45:07.590 DEBUG 9612 --- [nio-7777-exec-1] c.z.m.client.BookService                 : [BookService#findBySn] connection: keep-alive
2020-05-19 09:45:07.591 DEBUG 9612 --- [nio-7777-exec-1] c.z.m.client.BookService                 : [BookService#findBySn] content-type: application/json
2020-05-19 09:45:07.591 DEBUG 9612 --- [nio-7777-exec-1] c.z.m.client.BookService                 : [BookService#findBySn] date: Tue, 19 May 2020 01:45:07 GMT
2020-05-19 09:45:07.591 DEBUG 9612 --- [nio-7777-exec-1] c.z.m.client.BookService                 : [BookService#findBySn] keep-alive: timeout=60
2020-05-19 09:45:07.591 DEBUG 9612 --- [nio-7777-exec-1] c.z.m.client.BookService                 : [BookService#findBySn] transfer-encoding: chunked
2020-05-19 09:45:07.591 DEBUG 9612 --- [nio-7777-exec-1] c.z.m.client.BookService                 : [BookService#findBySn] 
2020-05-19 09:45:07.594 DEBUG 9612 --- [nio-7777-exec-1] c.z.m.client.BookService                 : [BookService#findBySn] {"sn":"111","bookName":"圖書1","desc":"weqwe"}
2020-05-19 09:45:07.595 DEBUG 9612 --- [nio-7777-exec-1] c.z.m.client.BookService                 : [BookService#findBySn] <--- END HTTP (48-byte body)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章