目次
1.2.1. Nacos 設定センターをリッスンするように order-service サービスを変更する
1.2.2. Sentinel ダッシュボードのソース コードを変更し、nacos データ ソースを設定する
1.2.3. Sentinel ダッシュボードのソース コードを変更し、フロントエンド ページを変更する
1.2.4. ダッシュボードのソースコードの再コンパイルとパッケージ化
1. ルールの永続化
1.1. ルールの永続性とは何ですか?
1.1.1. 背景を使用する
以前に Sentinel の一般的なゲームプレイを学習しましたが、使用中に問題が見つかりました。つまり、サービスが再起動されるたびに、Sentinel コンソールで設定されたさまざまなルールが失われます。これは、Sentinel のデフォルト設定がこれらのルールがメモリに保存されるためです。実稼働環境では、この状況は容認できません。
この問題は、センチネルのルール永続化によって解決できます。
1.1.2. ルール管理の 3 つのモード
a) オリジナルモード
オリジナルのモードは Sentinel のデフォルト モードです。このモードでは、Sentinel はルールをメモリに保存しますが、再起動するとルールは自然に失われます。
b) プルモード
実際の開発では、マイクロサービスはクラスターである必要があります。ダッシュボードにルールを記述すると、ルールはマイクロサービスの Sentinel クライアントにプッシュされます。その後、最初にルールがメモリに更新され、次にルールがローカル ファイルに永続化されます。データベース。
では、このルールが変更されたかどうかはどうすればわかるのでしょうか?
ここで、マイクロサービスはファイルまたはデータベースを定期的にポーリングし、データベースまたはファイルの内容の変更を検出すると、ルールが更新されたことを認識し、キャッシュ内のデータを更新できます。
欠陥
1. 適時性が低い: ハードディスクの読み取り速度に関係なく、読み取り速度が制限されているため、データベース内のデータが変更されますが、キャッシュ内のデータは変更されていません。キャッシュ内のデータ 無効なデータです。
c) プッシュモード
プッシュ モードでは、Sentinel ダッシュボードはルールを Sentinel クライアントにプッシュしませんが、ルールをリモート構成センターに保存します。
たとえば、nacos では、マイクロサービスが nacos を監視でき、変更が検出されると、データが即座に Sentinel クライアントに更新されます (プッシュ モードがリアルタイムで更新されることを示します)。
欠陥
実装はより複雑で、ソース コードの変更が必要になります。
1.2. プッシュモードの実装
1.2.1. Nacos 設定センターをリッスンするように order-service サービスを変更する
order-service で nacos を監視するための Sentinel の依存関係を導入します。
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
order-service の application.yml ファイルで nacos アドレスとモニタリング構成情報を構成します。
spring:
cloud:
sentinel:
datasource:
flow:
nacos:
server-addr: localhost:8848 # nacos地址
dataId: orderservice-flow-rules
groupId: SENTINEL_GROUP
rule-type: flow # 还可以是:degrade、authority、param-flow
1.2.2. Sentinel ダッシュボードのソース コードを変更し、nacos データ ソースを設定する
Sentinel ソース コード パッケージを github からダウンロードして解凍し、IDEA で開きます。
Sentinel-dashboard ソース コードの pom ファイルを変更し、 sentinel- datasource - nacos が依存する スコープ を削除します。
1.2.3. Sentinel ダッシュボードのソース コードを変更し、フロントエンド ページを変更する
a) test ディレクトリの nacos コードをmain の下の com.alibaba.csp.sentinel.dashboard.rule パッケージに コピーします。
b)コピーした nacos パッケージの下の NacosConfig クラスを変更し、その中のnacosアドレスを変更します。
import java.util.List;
import com.alibaba.csp.sentinel.dashboard.datasource.entity.rule.FlowRuleEntity;
import com.alibaba.csp.sentinel.datasource.Converter;
import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.api.config.ConfigFactory;
import com.alibaba.nacos.api.config.ConfigService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author Eric Zhao
* @since 1.4.0
*/
@Configuration
public class NacosConfig {
@Bean
public Converter<List<FlowRuleEntity>, String> flowRuleEntityEncoder() {
return JSON::toJSONString;
}
@Bean
public Converter<String, List<FlowRuleEntity>> flowRuleEntityDecoder() {
return s -> JSON.parseArray(s, FlowRuleEntity.class);
}
@Bean
public ConfigService nacosConfigService() throws Exception {
return ConfigFactory.createConfigService("localhost:8848");
}
}
c) com.alibaba.csp.sentinel.dashboard.controller.v2 パッケージの下の FlowControllerV2 クラスを変更します 。
次のコードを配置します。
@Autowired
@Qualifier("flowRuleDefaultProvider")
private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
@Autowired
@Qualifier("flowRuleDefaultPublisher")
private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;
着替える:
@Autowired
@Qualifier("flowRuleNacosProvider")
private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
@Autowired
@Qualifier("flowRuleNacosPublisher")
private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;
d) src /main/webapp/resources/app/scripts/directives/sidebar/ ディレクトリ内の sidebar.html ファイルを変更します 。
コメントのこの部分を開きます。
<!--<li ui-sref-active="active" ng-if="entry.appType==0">-->
<!--<a ui-sref="dashboard.flow({app: entry.app})">-->
<!--<i class="glyphicon glyphicon-filter"></i> 流控规则 V1</a>-->
<!--</li>-->
中のテキストを変更します。
<li ui-sref-active="active" ng-if="entry.appType==0">
<a ui-sref="dashboard.flow({app: entry.app})">
<i class="glyphicon glyphicon-filter"></i> 流控规则 Nacos</a>
</li>
1.2.4. ダッシュボードのソースコードの再コンパイルとパッケージ化
IDEA で Maven プラグインを実行して、変更された Sentinel-Dashboard をコンパイルしてパッケージ化します (単体テストを削除することを忘れないでください)。
1.2.5. 開始
次のコマンドを使用して nacos アドレスを変更し、起動します。
java -jar -Dnacos.addr=localhost:8848 sentinel-dashboard.jar
Sentinel クライアントを開くと、追加のフロー制御ルールがあることがわかります。ここで設定されたルールは、サービスが再起動されても消えません。