Шлюз Spring Cloud с шестью динамическими обновлениями хранилища Sentinel nacos

Java

Микросервисы в настоящее время так популярны, если вы не можете изучить технологию фреймворка микросервисов. Как я могу получить повышение по службе и прибавку к зарплате, а также увеличить количество фишек в моем резюме? Весеннее облако и Даббо нужно изучать отдельно. Скажи, что у тебя нет времени? Нет энергии? Хотите изучить два фреймворка? А Spring Cloud alibaba требует, чтобы вы изучили только одну, чтобы иметь две технологии инфраструктуры управления микросервисами. Почему бы не сделать это? Ну давай же! Год Сан-Апе

Правила Стража

---Идея Sentinel заключается в том, что разработчикам нужно обращать внимание только на определение ресурсов.Когда определение ресурсов прошло успешно, можно динамически добавлять различные правила деградации управления потоком. Sentinel предоставляет два способа изменения правил:

Прямая модификация через API (loadRules) Адаптация различных источников данных через DataSource Модификация через API более интуитивно понятна.Вы можете изменять различные правила через следующие API:

    FlowRuleManager.loadRules(List<FlowRule> rules); // 修改流控规则
    DegradeRuleManager.loadRules(List<DegradeRule> rules); // 修改降级规则
特别注意一下这俩个方法。后面会拿一个做案例说明

Ручное изменение правил (жестко запрограммированные методы) обычно используется только для тестирования и демонстрации. В рабочей среде правила обычно управляются динамически с помощью динамических источников правил.

Расширение источника данных

--- Вышеприведенный метод loadRules() принимает только объекты правил в памяти, но чаще правила хранятся в файлах, базах данных или центрах конфигурации. Интерфейс DataSource предоставляет нам возможность взаимодействовать с любым источником конфигурации. Надежнее реализовать интерфейс DataSource, чем изменять правила напрямую через API.

*Рекомендуется устанавливать правила через консоль и отправлять правила в единый центр правил. Клиент реализует интерфейс ReadableDataSource для мониторинга центра правил для получения изменений в режиме реального времени. Процесс выглядит следующим образом:*

file

Общие реализации расширений DataSource:

  • Режим извлечения: клиент активно опрашивает и извлекает правила из центра управления правилами, который может быть реляционной СУБД, файлами или даже системой контроля версий. Способ сделать это прост, но недостатком является то, что изменения не могут быть получены вовремя;
  • Режим принудительной отправки: центр правил равномерно отправляет изменения, а клиент постоянно отслеживает изменения, регистрируя слушателей, например, используя центры конфигурации, такие как Nacos и Zookeeper. Этот метод имеет лучшие гарантии согласованности и реального времени.

В настоящее время Sentinel поддерживает следующие расширения источников данных:

  • Pull-based: документация, Consul (начиная с 1.7.0)
  • Push-based: ZooKeeper, Redis, Nacos, Apollo

Потому что это nacos, используемый как центром регистрации, так и центром конфигурации. Здесь представлено только использование нако.

Интегрируйте код, измените pom и введите jar

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

Измените файл конфигурации yml. Добавить поддержку источника данных

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8890
        port: 8719
      eager: true
      datasource:
        na:
          nacos:
            server-addr: 47.99.209.72:8848
            groupId: DEFAULT_GROUP
            dataId: ${spring.application.name}-${spring.profiles.active}-sentinel
            rule-type: flow

Создайте файл cloud-gateway-demo-dev-sentinel в центре конфигурации nacos.file

[
    {
        "resource": "/api",
        "limitApp": "default",
        "grade": 1,
        "count": 5,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]

запустить службу

Посмотреть сторожевой панели запуска

file

Динамическая модификация при необходимости. Измените файл конфигурации, соответствующий nacos напрямую. Во время релиза Sentinel не возьмет всех желающих на этот эксперимент с динамическим обновлением.

Другая ситуация — ручная модификация метода API, улучшенная выше. Официально не рекомендуется

    FlowRuleManager.loadRules(List<FlowRule> rules); // 修改流控规则

Здесь тоже реализована эта схема

Очень просто, просто добавьте класс реализации ApplicationRunner для завершения

package com.xian.cloud.runner;

import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * <Description>
 *
 * @author xianliru@163.com
 * @version 1.0
 * @createDate 2019/11/12 11:18
 */
@Component
@Slf4j
public class FlowRuleRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        try {
            List<FlowRule> rules = FlowRuleManager.getRules();
            if(rules == null ){
                rules = new ArrayList<>();
            }
            FlowRule flowRule = new FlowRule("/refreshRoutes");
            flowRule.setCount(5).setClusterMode(false).setControlBehavior(0);
            flowRule.setLimitApp("default");
            rules.add(flowRule);
            log.info("FlowRuleRunner loadRules reules:{}  ",rules);
            FlowRuleManager.loadRules(rules);
        }catch (Exception e){
            log.error("FlowRuleRunner 加载异常 :{}",e.getMessage());
        }
    }
}

Здесь следует отметить, что ApplicationRunner что-то делает после запуска проекта. Если в методе запуска возникает исключение. Не захват приведет к выходу программы напрямую

Перезапускаем лаунчер. посмотри

file

Подумайте об этом, если текущее ограничивающее правило refreshRoutes все еще существует после изменения правил в центре конфигурации?

Теперь поэкспериментируйте, измените nacos api, чтобы протестировать и опубликовать его.

журнал программы

2019-11-13 10:23:07.426  INFO 43912 --- [.99.209.72_8848] c.a.n.client.config.impl.ClientWorker    : [fixed-47.99.209.72_8848] [polling-resp] config changed. dataId=cloud-gateway-demo-dev-sentinel, group=DEFAULT_GROUP
2019-11-13 10:23:07.535  INFO 43912 --- [.99.209.72_8848] c.a.n.client.config.impl.ClientWorker    : [fixed-47.99.209.72_8848] [data-received] dataId=cloud-gateway-demo-dev-sentinel, group=DEFAULT_GROUP, tenant=null, md5=b03e221f14293f3274788cbdb24a44b4, content=[
    {
        "resource": "/test",
        "limitApp": "default",
        "grade": 1,
        "cou...
2019-11-13 10:23:07.535  INFO 43912 --- [.99.209.72_8848] c.a.nacos.client.config.impl.CacheData   : [fixed-47.99.209.72_8848] [notify-listener] time cost=0ms in ClientWorker, dataId=cloud-gateway-demo-dev-sentinel, group=DEFAULT_GROUP, md5=b03e221f14293f3274788cbdb24a44b4, listener=com.alibaba.csp.sentinel.datasource.nacos.NacosDataSource$1@10b4e985 
2019-11-13 10:23:07.538  INFO 43912 --- [update-thread-1] c.a.nacos.client.config.impl.CacheData   : [fixed-47.99.209.72_8848] [notify-ok] dataId=cloud-gateway-demo-dev-sentinel, group=DEFAULT_GROUP, md5=b03e221f14293f3274788cbdb24a44b4, listener=com.alibaba.csp.sentinel.datasource.nacos.NacosDataSource$1@10b4e985 

Взгляните на консоль Sentinelfile

Правила, введенные ранее через ApplicationRunner, больше не используются.

отражение

  • Если в программе выбран метод DataSource для хранения динамических правил ограничения тока и т.д. Невозможно использовать официальные правила загрузки классов xxx.loadRules, предоставляемые различными инструментами. Поскольку динамическое обновление происходит один раз, правила, хранящиеся в памяти, будут очищены.
  • Ручной подход к API не гарантирует согласованности, правила сохраняются в памяти и исчезают при перезапуске. Категорически не рекомендуется для производственных сред

Прошлая информация и ссылки

Адрес официального документа Sentinel

Взято из ссылкиофициальная документация весеннего облака

Адрес официального сайта Alibaba Spring Cloud

Образец кода адреса

Адрес сервера nacos http://47.99.209.72:8848/nacos

Прошлый адрес весеннее облако алибаба адрес

Знакомство с весенним облаком Alibaba

Spring Cloud Alibaba (построен реестром nacos)

Spring Cloud Alibaba использует реестр nacos

Использование центра конфигурации Spring Cloud Alibaba nacos

служба весеннего облачного шлюза

Служба шлюза Spring Cloud zuul 1

Spring Cloud Gateway Service zuul II

Служба шлюза Spring Cloud для трех динамических маршрутов

Spring Cloud Alibaba gateway sentinel zuul четыре токоограничивающих предохранителя

Служба шлюза шлюза Spring Cloud 1

Утверждение службы шлюза Spring Cloud 2, фильтр

Шлюз Spring Cloud с тремя пользовательскими фильтрами GatewayFilter

Шлюз шлюза Spring Cloud, четыре динамической маршрутизации

Интеграция Spring Cloud с пятью Sentinel

Если вам это нравится, вы можете подписаться и поделиться этой общедоступной учетной записью.file

Заявление об авторских правах: эта статья является оригинальной статьей блоггера и соответствует соглашению об авторских правах CC 4.0 BY-SA. Пожалуйста, приложите ссылку на оригинальный источник и это заявление для перепечатки. Пожалуйста, прикрепите QR-код официального аккаунта для перепечатки