記事ディレクトリ
目次
序文
以下は、使用される依存関係です
<!--リボンを含む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);
}
要約する
なし