Persistenzprozess

Warum Beharrlichkeit? Wenn es nicht dauerhaft ist, starten Sie die Anwendung neu und die Daten sind weg. Dies wird auch als Raw-Modus bezeichnet.

Wir empfehlen, die Regeln über die Konsole festzulegen und die Regeln an das einheitliche Regelcenter zu übertragen. Der Client implementiert die ReadableDataSource-Schnittstelle und überwacht das Regelcenter, um Änderungen in Echtzeit zu erhalten.

Der Ablauf ist wie folgt:Bild

DataSource erweitert gängige Implementierungen

  • Pull-Modus: Der Client fragt aktiv Regeln ab und zieht Regeln aus einem Regelverwaltungszentrum, das RDBMS, Dateien oder sogar VCS sein kann. Der Weg dazu ist einfach, aber der Nachteil ist, dass Änderungen nicht rechtzeitig erhalten werden können;
  • Push-Modus: Das Regelzentrum pusht einheitlich, und der Client überwacht jederzeit Änderungen, indem er Listener registriert, z. B. mithilfe von Konfigurationszentren wie Nacos und Zookeeper. Diese Methode bietet bessere Echtzeit- und Konsistenzgarantien.

Werfen wir einen Blick auf die verfügbaren Modi und die Unterschiede zwischen ihnen.

Bild

pom-Datei-Abhängigkeiten

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

yaml-Konfiguration

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080
#        port: 8719
#        client-ip: localhost
      eager: true
      web-context-unify: false
      datasource:
        # 规则命名:可以任意命名
        flow-rule:
          # 持久化在nacos中,还可选择zookeeper,consul等
          nacos:
            # nacos服务地址
            server-addr: ip:8848
            namespace: 45de6484-833e-4cce-b895-f14095f20605
            group-id: SENTINEL_GROUP
            # 配置DataId
            data-id: ossa-service-producer-flow-rule
            data-type: json
            # 流控规则:FLOW,DEGRADE,PARAM_FLOW等
            rule-type: flow

Nacos-Konfiguration

Bild
[
  {
    "resource""/test",
    "limitApp""default",
    "grade"1,
    "count"2,
    "strategy"0,
    "controlBehavior"0,
    "clusterMode"false
  },
    {
    "resource""/producer/{id}",
    "limitApp""default",
    "grade"1,
    "count"2,
    "strategy"0,
    "controlBehavior"0,
    "clusterMode"false
  }
]