Узнайте, как использовать новую версию Nacos в одной статье
Узнайте, как использовать новую версию Nacos в одной статье
  • Все провайдеры предоставляют свое собственное имя Служитьиз и данные своего хоста (IP-адрес).,порт,Версияждать)писатьприезжатьделатьдля Служитьзарегистрироватьсясередина Сердцеиз Хозяинсерединаизсписоксередина,И таблица называется Для Служитьзарегистрироваться table
  • Всем потребителям необходимо позвонить в микросервисы,будет следоватьзарегистрироватьсясередина Сердце首先Воля Служитьзарегистрироватьсяповерхностьскачатьприезжатьместный,Затем в соответствии с местным установленным потребителем алгоритмом политики балансировки нагрузки выберите провайдера для звонка.,Этот процесс называется для Служить открытию.
  • может использоваться как SpringCloud Служитьзарегистрироватьсясередина Сердцеиз Есть много устройств Служить,Zookeeper,Eureka,Consul Подожди, весна Cloud Alibaba Реестр, используемый в Nacos
  • После Служитьсуществоватьзапуска при поступлении звонка он автоматически начнется с Nacos Центр регистрации загружает и кэширует реестр локально. Итак, даже Nacos Происходит простой,Вы обнаружите, что потребитель все еще может позвонить поставщику услуг. Просто в данное время Служить для регистрации уже нельзя.,Служитьсередина кэш иззарегистрироваться Информация списка не может быть обновлена. "

Что такое Накос

Официальный сайт

  • Облачные приложения — это просто SaaS, работающие на IaaS или PaaS.
  • При разработке приложений вам нужно только подумать о том, как в полной мере использовать эластичность, отказоустойчивость и распределенные возможности облака, что отличается от локализованной разработки.
  • суммируяОблачное решение = DevOps + CI/CD + контейнеризация

Архитектура Накоса

  • Сам язык Java интегрирует Nacos с помощью Nacos Client.
  • Nacos Обеспечивает интеграцию с другими языками. Nacos Sidecar (многоязычный гетерогенный модуль)
    • для использования на других языках SpringCloud Alibaba Предоставить возможность
  • NameService
    • поддерживатьdns,VIP (виртуальный IP),address-server
  • Звонок через клиент OpenApiПоддержка http, dns, udp, tls.можетиспользовать ConfigService и NamingService(Служить Обнаружить) Две основные функции
  • Nacos кластер следует протоколу согласованности данных Consistency Protocol
    • priv-raft,sync renew,rdbms based
    • ConfigService Используйте реляционную базу данных rdbms based
    • NamingService использовать priv-raft алгоритм

Местный стартап Nacos

  • Загрузите nacos2.2.1, разархивируйте его и войдите в папку conf.
  • Введите файл application.properties.
Язык кода:javascript
копировать
nacos.core.auth.enabled=true #Включить аутентификацию
nacos.core.auth.server.identity.key=nacosIdKey			#Устанавливаем значение ключа
nacos.core.auth.server.identity.value=nacosIdValue 	#Установить значение
### The default token (Base64 String):
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
  • Входить nacos,bin в каталогеВыполнить автономный запуск.cmd -mУкажите одну машинузапускать,Значение по умолчанию:кластерзапускать
  • проходитьзапускать Вывод журналаиз Внутренний адрес Входить nacos В фоновом режиме управления учетная запись и пароль по умолчанию: nacos
  • Начальная страница «Входить в фоновом режиме» Список конфигурации по умолчанию пуст, потому что Сяо Ли уже выполнил конфигурацию раньше. урация, для конфигурациисередина и из Конфигурация сохранит хранилище приехать база данных середина
  • Сердце другое, сердце другое, сердце другое, сердце другое, нако серединазарегистрироватьсяиз Служитьпо умолчаниюдля Временный Например, постоянное хранение выполняться не будет.

Поставщик сборки провайдера-nacos-8081

Создание среды

  • Создайте родительский проект и используйте maven Транзитивность зависимостей в родительском проекте pom документсерединаобозначение springboot версия родительского проекта и springcloud,springcloudalibaba Версия
Язык кода:javascript
копировать
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.7</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.cheese</groupId>
  <artifactId>springcloudalibaba</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>springcloudalibaba</name>
  <description>springcloudalibaba</description>
  <modules>
    <module>01-provider-nacos-8081</module>
    <module>02-consumer-nacos-8080</module>
    <module>03-provider-config-8081</module>
    <module>04-consumer-openfegin-8080</module>
  </modules>

  <properties>
    <java.version>17</java.version>
    <spring-cloud.version>2022.0.0</spring-cloud.version>
    <spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
  </properties>
  <!--Управление подпроектамиизspringcloudalibabaВерсия-->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>${spring-cloud-alibaba.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>

  </dependencies>

</project>
  • существовать provider-nacos-8081 и consumer-nacos-8080 середина необходимо указать только родительский проект из gav Информация может автоматически получать зависимости родительского проекта. Остальным требуется только ввести необходимые зависимости. Кроме того, вновь представленную версию также можно использовать в качестве родительского проекта. spring-boot-parent серединаруководитьпо умолчанию Конфигурация,Подпроект середина вводит зависимости и может наследовать Версия Конфигурация по умолчанию.,Вы также можете настроить зависимости Версия
Язык кода:javascript
копировать
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
  <!--обозначение父工程gav-->
    <parent>
        <groupId>com.cheese</groupId>
        <artifactId>springcloudalibaba</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>01-provider-nacos-8081</artifactId>
    <packaging>jar</packaging>

    <name>01-provider-nacos-8081</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
      <!--外部полагатьсянуждатьсяобозначениеversion-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.23</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
</project>

Напишите файл конфигурации application.yaml.

  • обозначениеномер порта
Язык кода:javascript
копировать
server:
  port: 8081
  • Конфигурациямикросервисыимя
Язык кода:javascript
копировать
spring:
  #микросервисыимя  application:
    name: depart-provider
  • Конфигурация spring-data-jpa
Язык кода:javascript
копировать
spring:
  jpa:
    generate-ddl: true #При указании запуска контейнера Spring таблица создателя по умолчанию имеет значение дляfalse
    show-sql: true #sql Независимо от того, отображается ли в консоли операторы sql, значение по умолчанию — дляfasle.
    hibernate:
      ddl-auto: none #Установить, чтобы таблица не обновлялась при применении Перезапуска

Создать базу данных

Язык кода:javascript
копировать
-- auto-generated definition
create schema alibaba2024 collate utf8mb4_0900_ai_ci;
use alibaba2024;
-- auto-generated definition
create table depart_entity
(
    id   int          not null
        primary key,
    name varchar(255) null
);

писательский бизнес

Класс сущности
Язык кода:javascript
копировать
@Data
@Entity
@JsonIgnoreProperties({"hibernateLazyInitializer","handler","fieldHandler"})
/**
 * Объект запроса JPA, отложенная загрузка по умолчанию, игнорировать отложенную загрузку
 */
public class DepartEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)//самовозрастающийID    public Integer id;
    public String name;
}
Класс контроллера
Язык кода:javascript
копировать
@RequestMapping("/provider/depart")
@RestController
public class DepartController {
    @Autowired
    private DepartService departService;
    /**
     * Как правило, в производственной среде середина будет иметь одно и то же имя интерфейса, и для их различения используется метод запроса CRUD.
     * @param depart
     * @return
     */
    //Новый
    @PostMapping("/save")
    public Boolean addDepart(@RequestBody DepartEntity depart) {
        return departService.addDepart(depart);
    }
    //удалить
    @DeleteMapping("/del/{id}")
    public Boolean deleteDepart(@PathVariable("id") Integer id) {
        return departService.deleteDepartById(id);
    }

    //Исправлять
    @PutMapping("/update")
    public Boolean updateDepart(@RequestBody DepartEntity depart) {
        return departService.updateDepart(depart);
    }

    //Получать
    @GetMapping("/get/{id}")
    public DepartEntity getDepart(@PathVariable("id") Integer id) {
        return departService.getDepartById(id);
    }

    //список
    @GetMapping("/list")
    public List<DepartEntity> getDepartList() {
        return departService.getAllDepart();
    }

}
Интерфейс логического уровня и уровня данных
  • Контроллер вызывает сервисный интерфейс
Язык кода:javascript
копировать
public interface DepartService {
    //insert
    boolean addDepart(DepartEntity depart);
    //update
    boolean updateDepart(DepartEntity depart);
    //delete
    boolean deleteDepartById(Integer id);
    //get
    DepartEntity getDepartById(Integer id);
    //Query
    List<DepartEntity> getAllDepart();
}
  • хранилище сервисных вызовов
Язык кода:javascript
копировать
@Service
public class DepartServiceImpl implements DepartService {

    @Resource
    private DepartRepository departRepository;


    @Override
    public boolean addDepart(DepartEntity depart) {
        return departRepository.save(depart) != null;
    }

    @Override
    public boolean updateDepart(DepartEntity depart) {
        return addDepart(depart);//JPA, лежащий в основе метода saveOrUpdate, различает, является ли входящий атрибут идентификатора объекта нулевым
    }

    @Override
    public boolean deleteDepartById(Integer id) {
        if (departRepository.existsById(id)) {
            departRepository.deleteById(id);
            return true;
        }
        return false;
    }

    @Override
    public DepartEntity getDepartById(Integer id) {
        if (departRepository.existsById(id)) {
            return departRepository.getReferenceById(id);
        }
        DepartEntity depart = new DepartEntity();
        depart.setName("not exist this depart");
        return depart;
    }

    @Override
    public List<DepartEntity> getAllDepart() {
        return departRepository.findAll();
    }
}
  • Интерфейс репозитория называется Spring-data-jpa серединаиз Базовый метод завершает данные в результате операций чтения и записи.
Язык кода:javascript
копировать
public interface DepartRepository extends JpaRepository<DepartEntity, Integer> {
}

Структура модуля

Сборка потребительского потребителя-nacos-8080

Создание среды

  • За исключением того, что родительский проект зависит от провайдер-nacos-8081 соответствует, за исключением consumer Будет проще сделать функции, необходимые потребителям и зависящие от среды, поэтому мы не будем их здесь расширять.

Напишите конфигурацию файла yaml

Язык кода:javascript
копировать
# номер порта
server:
  port: 8080
spring:
  #микросервисыимя  application:
    name: depart-consumer

писательский бизнес

  • Класс сущностии provicer-nacos-8081 Просто сохраняйте последовательность, потребителям не нужно service и repostitory
  • Используйте собственный RestTemplate Spring для удаленного доступа.
Написать класс конфигурации
Язык кода:javascript
копировать
@Configuration
public class DepartConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
Контроллер записи
Язык кода:javascript
копировать
@RestController
@RequestMapping("/consumer/depart")
public class DeportController {
    @Resource
    private RestTemplate restTemplate;
    //Режим прямого подключения
    public static final String SERVICE_PROVIDER = "http://localhost:8081/provider/depart";
   
    //Новый
    @PostMapping("/")
    public Boolean addDepart(@RequestBody DepartEntity depart) {
        return restTemplate.postForObject(SERVICE_PROVIDER + "/save", depart, Boolean.class);
    }

    //Исправлять
    @PutMapping("/")
    public void modifyDepart(@RequestBody DepartEntity depart) {
        restTemplate.put(SERVICE_PROVIDER + "/update", depart);
    }

    //удалить
    @DeleteMapping("/{id}")
    public void deleteDepart(@PathVariable Integer id) {
        restTemplate.delete(SERVICE_PROVIDER + "/del/" + id);
    }
    //запрос
    @GetMapping("/{id}")
    public DepartEntity getDepart(@PathVariable Integer id) {
        return restTemplate.getForObject(SERVICE_PROVIDER + "/get/" + id, DepartEntity.class);
    }
    //список
    @GetMapping("/list")
    public List<DepartEntity> getDepartList() {
       return restTemplate.getForObject(SERVICE_PROVIDER + "/list", List.class);
    }
}

Запустите сервис для тестирования

Запуск поставщика и потребителя для тестирования

  • тест provider
    • Добавлены новый отдел кадров и финансовый отдел.
  • список запросов
  • Запрос в финансовый отдел
  • Переведен в отдел исследований и разработок.
  • Удалить отдел исследований и разработок
  • тест consumer Действуйте аналогично описанному выше методу, только здесь проверьте один раз.
    • Получить HR

Внедрить поставщика и потребителя в nacos

  • существовать provider-nacos-8081 ,потребитель-NACOS-8080 yaml документсередина Новыйследующее Конфигурация
Язык кода:javascript
копировать
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacosзарегистрироватьсясерединаheart адрес
        username: nacos
        password: nacos
  • Воля consumer серединаиз DepartConterller Просто измените его следующим образом
Язык кода:javascript
копировать
    //Режим прямого подключения
    //public static final String SERVICE_PROVIDER = "http://localhost:8081/provider/depart";
    //метод вызова микросервиса
    public static final String SERVICE_PROVIDER = "http://depart-provider/provider/depart";
  • Начать последовательно nacos,provider,consumer,Входить nacos Опыт управления

Примечание. После версии nacos 2.2.0.1 от балансировщика нагрузки ленточного клиента отказались и использовали балансировщик нагрузки сообщества Springcloud. К потребителю необходимо добавить следующие зависимости.

Язык кода:javascript
копировать
        <!--nacos2.2.0.1позже Версияиз Зависимости балансировки нагрузки клиента-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
  • DepartConfig добавил аннотацию
Язык кода:javascript
копировать
@Configuration
public class DepartConfig {
    @Bean
    //Нагрузка вызывается так же, компонент Netflix серединаиз балансировки нагрузки существующегоnacosсередина больше не используется,
    //nacosиспользоватьновыйиз использует Spring-cloud-starter-loadbalancer для реализации балансировки клиентской нагрузки
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
  • Если вы не выполните вышеуказанную настройку consumer Воля Не могу найти этоприезжатьимядляdepart-providerизмикросервисы

Получить список услуг

  • существовать provider-nacos-8081 серединаиз DepartController середина Новыйнижеинтерфейси Конфигурация
Язык кода:javascript
копировать
@RequestMapping("/provider/depart")
@RestController
public class DepartController {
    .....
    @Autowired
    private DiscoveryClient discoveryClient; //Служитьоткрыть клиента

    @GetMapping("/discovery")
    public List<String> discoveryHandle() {
        List<String> services = discoveryClient.getServices();
        services.forEach(v1->{
            //Получатьмикросервисыимяизвсемикросервисы Пример
            discoveryClient.getInstances(v1).forEach(v2->{
                HashMap<String, Object> map = new HashMap<>();
                map.put("serviceName", v1);
                map.put("serviceId", v2.getServiceId());
                map.put("serviceHost", v2.getHost());
                map.put("servicePort", v2.getPort());
                map.put("uri", v2.getUri());
                System.out.println("map = " + map);
            });
        });
        return services; //Вернем имена всех активных измикросервисов
    }

    .......
}
  • Получить текущий экземпляр
  • Просмотр информации о выводе консоли

кэш реестра Nacos

  • nacos Сервер «Служить» не работает, но клиент все еще может кэшировать используемую таблицу. провайдер, просто не могу обновить реестр
  • consumer тест
  • Discovery Не могу найти список приезжать Служить
  • зарегистрироватьсяповерхность Толькосуществовать发生调用часруководитьскачать,нравиться nacos запускать,Служить Тоже нормальнозапускать,существоватьпосле этого nacos Если вы повесите трубку напрямую, то consumer Реестр не был загружен локально и не может быть найден. provider
  • nacos повесь трубку, потребитель Если таблица существующегоместногозарегистрирования не сохранена, проживание не будет найдено при поиске по названию микросервиса. провайдера, получение микросервисов на основе имени микросервиса не удастся.
  • discovery Нет проблем с получением имени микросервиса, поэтому он может работать нормально, однако можно получить только пустой список.

Временные и постоянные экземпляры

Как настроить

  • Nacos серединаиз Пример分для Временный экземплярипостоянный экземпляр。
    • существовать Служить Зарегистрироваться имеет атрибут ephemeral Используется для описания текущего экземпляра существования. Зарегистрироваться, использовать ли Временный экземпляр Появляться。
    • для true Это временный экземпляр, значение по умолчанию — false; Это постоянный экземпляр.

разница

  • Места хранения экземпляров и механизмы определения работоспособности временных и постоянных экземпляров различаются.
  • Временный экземпляр
    • По умолчанию.
    • Служить Пример仅会зарегистрироватьсясуществоватьNacos В памяти он не сохранится на диске Nacos.
    • Что Механизм определения здоровьядля Client режим, то есть Client взять на себя инициативу, чтобы Server Сообщить Что о состоянии здоровья. Интервал пульса по умолчанию для 5 Второй。существовать 15 в течение нескольких секунд Server Не получено client сердцебиение, это будет означать «нездоровое» состояние существования; 30 в течение нескольких секундруо приезжать client Heartbeat, «работоспособное» состояние будет восстановлено, в противном случае экземпляр вернется в «исправное» состояние. Server Конец очистки памяти.
  • постоянный экземпляр
    • Экземпляр «Служить» будет не только храниться в памяти Nacos, но и будет постоянно прибывать. Nacos диск.
    • Что Механизм определения здоровьядля Server режим, то есть Server Возьму на себя инициативу протестировать client состояние здоровья, по умолчанию для каждого 20 Проверяйте раз в секунду. После неудачной проверки работоспособности экземпляр Служить будет помечен как «неработоспособный», но не будет очищен, поскольку для Что является постоянным существующим диском. "

Установите поставщика на постоянный экземпляр

  • по умолчаниюзарегистрироватьсяиз Служитьвседля Временный копия, развернутая в середине большинства сцен экземпляр
  • ужезарегистрироваться Проходитьиз Временный экземпляр Служить,не сновазарегистрироватьсядляпостоянный экземпляр
Язык кода:javascript
копировать
spring:
  cloud:
      nacos:
        discovery:
          ephemeral: false #Установить, является ли это временным узлом, по умолчанию установлено дляtrue, для временного узла, false, установлено не для временного узла, то есть постоянный экземпляр,ужезарегистрироватьсяиз Временный экземпляр Нет Исправлятьдляпостоянный экземпляр
Язык кода:javascript
копировать
curl -d 'serviceName=depart-provider' \
  -d 'ip=192.168.1.102' \
  -d 'port=8081' \
  -d 'ephemeral=false' \
  -d 'username=nacos' \
  -d 'password=nacos' \
  -X DELETE 'http://127.0.0.1:8848/nacos/v2/ns/instance'

Режим Nacos CAP

По умолчанию согласованность данных кластера Nacos Discovery использует режим AP. Но он также поддерживает режим CP и его необходимо конвертировать. Чтобы преобразовать в CP, вы можете отправить следующий запрос PUT для завершения преобразования из AP в CP.

Сохранение данных во внешнем MySQL

  • оказаться mysql-schema.sql документ
    • nacos-server-2.2.1\nacos\confпо пути
  • Создать базу данных nacos_config.
Язык кода:javascript
копировать
create database nacos_config
  • бегать mysql-schema.sql документ
  • Исправлять Конфигурациядокумент
Язык кода:javascript
копировать
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
spring.datasource.platform=mysql
spring.sql.init.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=abc123
  • Перезапустить Накос
  • существовать mysql Добавить новую роль
  • использовать Новыйиз роль для входа в систему

Локальное развертывание кластера Nacos

  • создаватькластер Конфигурациядокумент cluster.conf
Язык кода:javascript
копировать
#номер oНепрерывное предотвращение занятости системных портов
192.168.1.102:8849
192.168.1.102:8851
192.168.1.102:8853
  • создаватькластер,Исправлятьномер порта
  • двойной щелчок startup.cmdпо умолчаниюкластерзапускать
  • provider зарегистрироваться nacos кластер
Язык кода:javascript
копировать
spring:
  cloud:
    nacos:
      discovery:
        #server-addr: localhost:8848 #nacosзарегистрироватьсясерединаheart адрес
        #кластерзарегистрироваться
        server-addr: localhost:8849,localhost:8851,localhost:8853 #nacosзарегистрироватьсясерединаheart адрес
        username: dev
        password: dev01

Независимо от способа развертывания, пользователям рекомендуется поместить все сервисные узлы в кластере Nacos под VIP, а затем повесить их под доменное имя. <http://ip1:port/openAPI> Если в режиме прямого IP-соединения машина зависает, вам необходимо изменить IP-адрес, прежде чем его можно будет использовать. <http://SLB:port/openAPI> Режим монтирования SLB (SLB внутренней сети, не может быть открыт для общедоступной сети во избежание угроз безопасности), просто подключайтесь к SLB напрямую, а ниже висит реальный IP-адрес сервера, который не читается. <http://nacos.com:port/openAPI> доменное имя + Режим SLB (SLB внутренней сети, не может быть доступен в общедоступной сети во избежание угроз безопасности), хорошая читаемость и легкость изменения IP-адреса, рекомендуемый режим

существоватьиспользоватьVIPчас,нужно быть открытымNacosСлужитьизхозяинпорт(по умолчанию8848)а такжеgRPCпорт(по умолчанию9848)、同час如果верноNacosизхозяинпорт Что-нибудь Исправлятьизразговаривать,нужноvipсерединаизпорт映射делать出Конфигурация,специфическийпортиз Справочник по методу сопоставленияОбзор руководства по развертыванию — архитектура развертывания Nacos

Модель данных Nacos

Службы в Nacos однозначно идентифицируются тройкой: пространство имен, группа и служба имен служб. Роль пространства имен и группы та же, они используются для разделения различных областей и изоляции сервисов. Разница в том, что область действия пространства имен больше, и одна и та же группа может содержаться в разных пространствах имен. Разные группы могут содержать одну и ту же услугу. Значение по умолчанию для пространства имен — public, а значение по умолчанию для группы — DEFAULT GROUP. . Отношения между ними показаны на официальном рисунке ниже.

  • Модель данных Nacos Key Уникально определяемое триплетом, пространство имен по умолчанию представляет собой пустую строку, «публичное пространство». имена(публичные), группировка по умолчанию — DEFAULT. GROUP.

изоляция сервисов

Запустите три экземпляра провайдера-nacos-8081, предоставляющие одну и ту же службу, другое пространство имен, группу и порт.

пространство имен

Название группы

номер порта

public

DEFAULT_GROUP

8081

public

MY_GROUP

8082

ns_test

MY_GROUP

8083

  • существовать DepartServiceImpl середина Новыйномер порта
Язык кода:javascript
копировать
@Service
public class DepartServiceImpl implements DepartService {

    @Resource
    private DepartRepository departRepository;
    //Получатьномер порта
    @Value("${server.port}")
    private Integer port;


    @Override
    public DepartEntity getDepartById(Integer id) {
        if (departRepository.existsById(id)) {
            return departRepository.getReferenceById(id);
        }
        DepartEntity depart = new DepartEntity();
        depart.setName("not exist this depart port: "+ port);
        return depart;
    }
}
  • Выходной порт при вызове потребителя
  • 8081 Значение по умолчанию Начать настройку
  • 8082 Измените конфигурацию следующим образом
  • 8083 снимать фильмы Конфигурация
  • запускать Служить
  • consumer середина ничего не делает namespace,group Конфигурация
  • consumer Новый group Конфигурация
  • потребитель выпускает приведенную выше аннотацию пространства имен

Центр конфигурации службы Nacos Config

Файл конфигурации каждого хоста в кластере один и тот же, поэтому обновление и поддержка файла конфигурации становится сложной проблемой. В это время появился центр конфигурации, и файлы конфигурации каждого узла кластера были переданы в центр конфигурации для единого управления. Существует множество сопутствующих продуктов, таких как конфигурация Spring Cloud, Zookeeper, Apollo, Disconf и т. д. Однако Spring Cloud Alibaba официально рекомендует использовать Nacos в качестве центра настройки микросервисов. "

Получить удаленную настройку

  • Требование реализации здесь,приложениеиз Конфигурациядокумент Нетсуществоватьместный,И от Nacosconfig Управлять.

Настроить в конфигурации nacos

Общие принципы работы конфигурационного центра

Spring Cloud Config

Есть три основные проблемы:

  • Невозможно автоматически ощутить
  • Обновление депозитного стадного эффекта
  • Архитектура системы слишком сложна

Apollo

Его клиент Config может автоматически обнаруживать обновления файлов конфигурации. Но есть и два недостатка:

  • Архитектура системы сложна.
  • Конфигурационный документ поддерживает меньше типов.,Что поддерживает только xml, текст, свойства,Json и yml не поддерживаются.

Nacos Config

  • Уведомление клиента конфигурации автоматически распознает соответствующие обновления конфигурации.
  • Архитектура проста.
  • Поддерживает множество типов конфигурационных документов (поддерживает JSON и YML).

Zookeeper

  • Zookeeper Принцип работы Конфигурациясередина отличается от трех предыдущих. Что не имеет стороннего сервера Служить для хранения данных Конфигурации, но данные Воля Конфигурация хранятся самостоятельно из Znode середина Понятно。”
  • когда Конфигурациясередина Сердцесерединаиз Конфигурацияданные发生Понятно变更,Configclient Это также может быть обнаружено автоматически (Watcher механизм мониторинга).

Проблема согласованности

  • Конфигурациясередина Сердцесерединаиз Конфигурация данных обычно сохраняется, например, сторонних производителей. DBMS、Git Удаленные библиотеки и т. д.
  • Там безопасноConfigurationsedinaСердце Server середина вообще не хранит данные, поэтому изкластерсередина не хранит существующие данные. согласованности。
  • Но как Zookeeper,Чтоделатьдля Конфигурациясередина Сердце,Конфигурация Данные хранятсясуществовать Собственныйместныйиз。
  • Итак,кластерсерединаиз Узел хранитсясуществоватьданные Проблема согласованностииз。
  • Zookeeper кластер Для согласованности данныхиспользоватьиз CP модель. .
  • делатьдлязарегистрироватьсясередина Сердце,Эти Server кластер Время экономитсясуществоватьданные Проблема согласованностииз,онииспользоватьизмодель是Нет同из。Zookeeper(CP)、Eureka(AP)、Consul(AP)、Nacos(по умолчанию AP также поддерживает CP)。”

провайдер читает файл конфигурации из центра конфигурации

  • nacos Новый элемент конфигурации
  • Воляместный Конфигурацияместоприезжать nacos середина
  • существовать pom документсередина Новыйполагаться
Язык кода:javascript
копировать
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
  • новая скачать из версии springcloud2021 Не сканировать в будущем bootstrap.yaml документ,новая версия nacos местный Конфигурациядокумент Ренрандля application.yaml
  • Ваша существующая конфигурация выглядит следующим образом
Язык кода:javascript
копировать
spring:
  #микросервисыимя  application:
    name: depart-provider
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        username: nacos
        password: nacos
  • новая версия nacos нуждатьсяобозначение Конфигурациядокументрасширение
Язык кода:javascript
копировать
spring:
  cloud:
    nacos:
      config:
        file-extension: yaml #read из Конфигурациятип документа
  • новый Версиянуждаться Новыйследующее Конфигурация
Язык кода:javascript
копировать
spring:
  # новая версия Новый Конфигурация
  config:
    import:
      - optional:nacos:${spring.application.name}.${spring.cloud.nacos.config.file-extension}

Общая конфигурация

Язык кода:javascript
копировать
spring:
  cloud:
    nacos:
      config:
        #выполнить Общая компоненты, предварительное условие, одно и то же пространство имен, одна и та же группа, разные Служить совместное использование
       shared-configs[0]:
         data-id: shareconfig.yaml
         refresh: true
       shared-configs[1]:
         data-id: shareconfig2.yaml
         refresh: true
        #Для достижения расширения Конфигурация можно использовать совместно разные пространства имен и разные группы.
       extension-configs[0]:
         data-id: extensionconfig.yaml
         refresh: true
       extension-configs[1]:
         data-id: extensionconfig2.yaml
         refresh: true
        # Порядок загрузки конфигурации: Общая конфигурация=>Расширять Конфигурация=>когда前Конфигурация
        # Приоритет конфигурации: после загрузкииз Сначала перезапишу и загрузюиз=> когда前Конфигурация>Расширять Конфигурация>Общая конфигурация
  • В настоящее время Служитьиз Конфигурация может храниться в трех местах.
    • удаленныйConfigurationDocument(nacos Конфигурациясередина Сердце)
  • Снимок Конфигурациядокумент
  • местный Конфигурациядокумент(хозяин动писать Конфигурация)

Эти три файла с одинаковым именем также имеют проблемы с порядком загрузки. Их порядок загрузки следующий: локальный файл конфигурации, удаленный файл конфигурации, файл конфигурации моментального снимка. Пока система загружает файл конфигурации, последующие больше не будут загружаться.

Настройка динамических обновлений

  • Центр конфигурации nacos Сердце Новый раздел Конфигурация
  • Исправлять provider-config-8081 серединаиз DepartServiceImpl
Язык кода:javascript
копировать
@Service
@RefreshScope //Достигаем динамического обновления
public class DepartServiceImpl implements DepartService {

    @Resource
    private DepartRepository departRepository;
    //Получатьномер порта
    @Value("${server.port}")
    private Integer port;

    //Получать部门имяпроходить远程Конфигурациясередина Сердце
    @Value("${depart.name}")
    private String departName;

  
    @Override
    public DepartEntity getDepartById(Integer id) {
        if (departRepository.existsById(id)) {
            return departRepository.getReferenceById(id);
        }
        DepartEntity depart = new DepartEntity();
        depart.setName("not exist this depart"+departName+" port: "+ port);
        return depart;
    }
}
  • Перезапуск provider и consumer
  • Исправлять для Финансового департамента, к выпуску

Несколько вариантов окружения

существуют При разработке приложений обычно один и тот же набор программ используется в нескольких различных средах, таких как среда разработки, тестирования, производственная среда и т. д. Каждая среда избаза данныхадрес、Служитьустройствономер порт и прочее Конфигурация будет другая. Если в разных средах содержимое бега разное, то такой подход не только очень громоздкий, но и подвержен ошибкам. На данный момент вам необходимо определить разную информацию и выбрать разные конфигурации для разных сред.

  • существовать nacos config серединаверно depart-provider.yamlруководить克隆
  • местный nacos-config-8081 серединаиз application.yaml документсередина做ниже Конфигурация
Язык кода:javascript
копировать
spring:
  profiles:
    active: dev
  # новая версия Новый Конфигурация
  config:
    import:
      - optional:nacos:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

Настройка изоляции

Запустите три экземпляра поставщика-конфигурации-8081, предоставляющие одну и ту же службу, разное пространство имен, группу и порт.

пространство имен

Название группы

номер порта

public

DEFAULT_GROUP

8081

public

MY_GROUP

8082

ns_test

MY_GROUP

8083

  • существует конфигурация nacos
  • 8081 начинается по умолчанию
  • 8082 Выполнить запуск динамических параметров
  • 8083 Выполнить запуск динамических параметров
  • Начать последовательно consumer и provider кластер
  • consumer когда前Конфигурация
  • поставщик потребительского доступа
  • потребитель освобождает аннотацию пространства имен, перезапускает потребителя и снова посещает
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose