Openfeign のパラメーターの受け渡しとサービスの最適化


序文

以下は、使用される依存関係です

<!--リボンを含むspring cloud openfeign--> 
<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-openfeign</artifactId> 
</dependency> 

<!- - feign httpclient http 接続プールがモジュール間の通信を最適化 --> 
<dependency> 
    <groupId>io.github.openfeign</groupId> 
    <artifactId>feign-httpclient</artifactId> 
</dependency>

1. Openfeign パラメーターの受け渡し

パラメータ渡しと通常渡しに違いはありませんが、以下はopenfeignのインターフェースメソッドです

/**
 * contextId 跟的是真实地址的名字
 * value 服务的名字
 * @author Ren
 */
@FeignClient(contextId = "test",value = "song-test")
public interface TestService {


    /**
     * openfeign的使用
     * 测试数据
     * @return
     */
    @GetMapping(value = "/test/one")
    Result getOne();

    /**
     * openfeign的使用
     * 测试传递参数
     * @param dog
     * @return
     */
    @PostMapping("/dog/save")
    Result addDog(@RequestBody Dog dog);

}

2. openfeign のパフォーマンス最適化

2.1 パフォーマンス最適化のための GZIP

gzip はデータ形式です。デフレート アルゴリズムを使用してデータを圧縮するには、gzip を使用すると、ファイル サイズを 70% 以上削減できます。圧縮を有効にすると、ネットワーク リソースを効果的に節約できますが、CPU 負荷が高くなります。最小圧縮ファイルを増やすことをお勧めします適切なサイズ。

server:
  port: 9201
  #配置gzip压缩
  compression:
    #是否开启压缩
    enabled: true
    #配置支持压缩支持的MINE TYPE
    mime-types: text/html,text/xml.text/plain,application/xml,application/json
#配置openfeign的请求和响应压缩
feign:
  compression:
    request:
      #开启请求压缩
      enabled: true
      # 配置压缩支持的数据格式
      mime-types: text/xml,application/xml,application/json
      #配置压缩数据大小的下限
      min-request-size: 2048
    response:
      #开启响应压缩
      enabled: true

2.2 パフォーマンス最適化のための http 接続プール 

2 つのサーバー間で http 接続を確立するプロセスには、複数のデータ パケットの交換が含まれ、時間がかかります。http 接続プールを使用すると、多くの時間を節約し、スループットを向上させることができます。

feign の http クライアントは 3 つのフレームワークをサポートしています: HttpURLConnection、HttpClient、OkHttp

デフォルトは java.net.HttpURLConnection です. 各リクエストは接続を確立して閉じます. パフォーマンスを考慮して, 後者の 2 つのうちの 1 つを基礎となる通信フレームワークとして導入できます.

HttpURlConnection は JDK に付属する http クライアント技術であり、接続プールをサポートしていません. 接続プールのメカニズムを実装する場合は、接続オブジェクトを自分で管理する必要があります. ネットワーク要求に対してはより面倒です.

Apache は httpclient フレームワークを提供します. jdk に付属する従来の http テクノロジと比較して、http リクエスト ヘッダー、パラメータ、コンテンツ タイトル、応答などをカプセル化します. クライアントが http リクエストを送信しやすくするだけでなく、インターフェースのテストも容易にします. . 開発効率が向上し、コードの改善が容易になります. 堅牢性が高く、並行性が高い場合は、接続プールを使用してスループットを向上させることができます.

OkHttp は、ネットワーク リクエストを処理するためのオープン ソース プロジェクトです. Android 側で最も人気のある軽量フレームワークです. OKHTTP は、ソケットを共有してサーバーへのリクエストを減らし、接続プールを通じてリクエストの遅延を減らすという特徴があります.

たとえば、httpClient クライアント接続に変更します。

前提として、httpClient の依存関係を導入し、次の構成に変更して最適化を完了します。

feign:
  httpclient:
    #开启httpclient连接池
    enabled: true

2.3 パフォーマンス最適化のためのリクエストログ 

マイクロサービスの各インターフェイスを確認したい場合は、マイクロサービス間の詳細情報を表示するようにログを構成できます

マイクロサービス モジュールの構成ファイルに新しい logback.xml を作成します。

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!--日志存放路径 这里要改成自己的项目-->
    <property name="log.path" value="logs/song-system" />
    <!--日志输出格式-->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
<!--控制台输出-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!--系统日志输出-->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/info.log</file>
    <!--循环政策 基于时间创建日志文件-->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件名格式-->
        <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
        <!--日志最大保存天数-->
        <maxHistory>60</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>${log.pattern}</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <!--过滤级别-->
        <level>INFO</level>
        <!--匹配时的操作 接收记录-->
        <onMatch>ACCEPT</onMatch>
        <!--不匹配时的操作 拒绝记录-->
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>


    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/error.log</file>
        <!--循环政策 基于时间创建日志文件-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件名格式-->
            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--日志最大保存天数-->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--过滤级别-->
            <level>ERROR</level>
            <!--匹配时的操作 接收记录-->
            <onMatch>ACCEPT</onMatch>
            <!--不匹配时的操作 拒绝记录-->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>





    <!--系统模块日志控制级别 这里要改成自己的项目-->
    <logger name="org.example" level="debug" />
    <!--spring 日志级别控制-->
    <logger name="org.springframework" level="warn" />

    <root level="info">
        <appender-ref ref="console"/>
    </root>

    <!--系统操作日志-->
    <root level="info">
        <appender-ref ref="file_info"/>
        <appender-ref ref="file_error"/>
    </root>
</configuration>

追加後にログを挿入するために必要なオブジェクト

すべてのリクエストのログと詳細情報を表示する場合は、グローバル構成が必要です。Spring Boot スタートアップ クラスに直接コードを追加するだけです。

 

/** 
 * グローバル構成ログ クラス
 * @param 
 */ 

@Bean 
public Logger.Level getLog(){ 
    return Logger.Level.FULL; 
}

ローカルで表示する場合は、ローカルで構成します

まず、新しい構成クラスを作成する必要があります

@Configuration
public class FeignConfiguration{

  @Bean
    public Logger.Level getLog(){
        return Logger.Level.FULL;
    }

}

次に、クライアントの構成を指定して、ローカル ログを完成させます。

/**
 * contextId 跟的是真实地址的名字
 * value 服务的名字
   *configuration=FrignConfiguration.class 表示只对调用的接口的请求生成日志
 * @author Ren
 */
@FeignClient(contextId = "test",value = "song-test" configuration=FrignConfiguration.class)
public interface RemoteTestService {


    /**
     * openfeign的使用
     * 测试数据
     * @return
     */
    @GetMapping(value = "/test/one")
    Result getOne();

    /**
     * openfeign的使用
     * 测试传递参数
     * @param dog
     * @return
     */
    @PostMapping("/dog/save")
    Result addDog(@RequestBody Dog dog);

}

 

 


要約する

なし

おすすめ

転載: blog.csdn.net/qq_55648724/article/details/129108681