Nacos | Я могу начать

Java распределенный
Nacos | Я могу начать

Это 21-й день моего участия в ноябрьском испытании обновлений. Узнайте подробности события:Вызов последнего обновления 2021 г.

🤞 Персональная домашняя страница:@青城Sequencer Stone
🤞 Преимущества вентилятора:Добавить фан-базуОтвечайте на вопросы один на один, получайте бесплатные шаблоны резюме, улучшайте учебные материалы и т. д. и станьте королем новой эры!

Это мероприятие организованоНаггетс официальныйПоддержка, подробнееnuggets.capable/post/700064…, я случайным образом выберу всех комментаторов из области комментариевДва супер красивых значка Nuggets, инструмент лотереи принимаетонлайн лотереяТаким образом, каждый может комментировать и взаимодействовать.

В микросервисной архитектуре реестр сервисов является центральным компонентом. Целью, которую он достигает, является облегчение связи между несколькими службами, горизонтальное расширение служб и т. д. Предоставляемые им услуги включают регистрацию и обнаружение служб, централизованную настройку, проверку работоспособности и удаление служб. На рынке есть много компонентов, в том числеConsul,Zookeeper,Nacos,Eurekaи т.п. Конкретные отличия этих компонентов относительно богаты, и о них мы откроем отдельную статью. В этой статье мы поговорим о том, что более популярно в КитаеNacosБыстрый старт, содержание статьи будет включатьNacosБазовые знания, построение среды на основеSpringboot2Инженерная практика.

1. Основные концепции Nacos

Техническая группа Nacos подробно представила его в онлайн-документации, см.Документация Nacos, основной смысл заключается в следующем.

Nacos (official site: nacos.io) is an easy-to-use platform designed for dynamic service discovery and configuration and service management. It helps you to build cloud native applications and microservices platform easily.

--Введение из официальной документации Github

Проще говоря, он гордится тем, что является простой в использовании платформой. Основная функциональность предназначена для динамического обнаружения служб, настройки и управления службами. Цель состоит в том, чтобы помочь разработчикам легко создавать облачные приложения и микросервисные платформы.

Я все еще недостаточно понимаю, давайте говорить яснее,NacosЭто центр регистрации Ali с открытым исходным кодом, и его идеальная поддержка основана наDNSи на основеRPCобнаружение службы. существуетSpring CloudЧтобы использовать Nacos в , необходимо только предварительно установить и настроитьNacos server, а затем просто настройте исходную службу, чтобы завершить регистрацию и обнаружение службы.

Его основные функции включают в себя:

  • Обнаружение служб и мониторинг работоспособности служб
  • Служба динамической настройки
  • Служба динамического DNS
  • Службы и управление их метаданными

Регистрация и обнаружение служб являются основными качествами реестра служб.Nacos также поддерживает службы динамической настройки, которые позволяют управлять конфигурацией приложений и конфигурацией служб во всех средах централизованным, внешним и динамическим образом. Динамическая конфигурация устраняет необходимость повторного развертывания приложений и служб при изменении конфигурации, что делает управление конфигурацией более эффективным и гибким. Централизованное управление конфигурацией упрощает внедрение служб без сохранения состояния и упрощает гибкое масштабирование служб по требованию.

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

Как разработчик, важные моменты, на которые мы можем обратить внимание в деталях Nacos, включают:

  • Поддержка CP/AP по протоколу соответствия (CAP)
  • Поддержка стратегии балансировки нагрузки
  • Имеет противолавинную защиту
  • Пример поддержки автоматической выхода
  • Поддержка мониторинга, нескольких центров обработки данных, синхронизации между реестрами
  • служба поддержкиSpring Cloud,Dubbo,K8sинтегрированный

2. Сборка на основе докерной среды

Как мы все знаем,NacosВо время работы данные должны храниться вMysql, поэтому мы должны выбрать установкуMysql. Поскольку облачный хост блоггера очень низкий, 1 ядро ​​​​2G, поэтому мы решили установить Mysql5.7, интегрированныйdocker-compose.ymlСодержание следующее,NACOS_VERSIONпеременная вenvфайловый контроль.

version: "2"
services:
  nacos:
    image: nacos/nacos-server:${NACOS_VERSION}
    container_name: nacos-standalone-mysql
    env_file:
      - ./env/nacos-standlone-mysql.env
    volumes:
      - ./standalone-logs/:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9555:9555"
    depends_on:
      - mysql
    restart: on-failure
    environment: 
      - JVM_XMS=64m
      - JVM_XMX=64m
      - JVM_XMN=16m
      - JVM_MS=8m
      - JVM_MMS=8m
      - NACOS_DEBUG=n
      - TOMCAT_ACCESSLOG_ENABLED=false
  mysql:
    container_name: mysql
    image: nacos/nacos-mysql:5.7
    env_file:
      - ./env/mysql.env
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - "3306:3306"
​

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

- JVM_XMS=64m
- JVM_XMX=64m
- JVM_XMN=16m
- JVM_MS=8m
- JVM_MMS=8m

Я так память копал, то настроить кластерный режим у меня тем более не получается.Начнем с автономного режима.

Кроме тогоdocker-compose.ymlВ файле используются два файла, а именноnacos-standlone-mysql.envа такжеmysql.env, содержание следующее.

mysql.env

MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=nacos_devtest
MYSQL_USER=nacos
MYSQL_PASSWORD=nacos

nacos-standlone-mysql.env

PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=mysql
MYSQL_SERVICE_DB_NAME=nacos_devtest
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=nacos
MYSQL_SERVICE_PASSWORD=nacos
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false

Заполненные параметры могут быть изменены в соответствии с реальной ситуацией разработки. Запустите его и настройте группу безопасности облачного сервера. доступ{ip}:{port}/nacos, на веб-странице появится страница входа в систему nacos, учетная запись и пароль по умолчаниюnacos, после авторизации появится следующая страница, а именноNacos-ConsoleНа данный момент среда успешно установлена.

p1.png

3. Практика - получите конфигурацию центра

В использованииSpring CloudинтегрированныйNacosРаньше мы использовалиSpring Boot. Для версии Nacos я использую0.2.4, это относительно новая версия.

3.1 Настройка конфигурации

Чтобы установить конфигурацию, мы можем использоватьNacosКонсоль управления, как показано на рисунке ниже, предварительно добавляемuseLocalCacheпараметры конфигурации.

p2.png

После заполнения конфигурации сохраните и добавьте конфигурацию.

3.2 Практика разработки

Чтобы получить конфигурацию динамически, вам необходимо передатьmavenИмпорт зависимостей проекта.

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>0.2.4</version>
</dependency>

Поскольку я хочу стать веб-сервером, когда этот проект будет развернут, вводятся веб-зависимости. Для демонстрационного проекта, такого как я, это не работает.TomcatДля такого тяжелого контейнера веб-сервиса я использую более легкийJetty, сначала исключитьTomcatполагаться.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>${spring-boot.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

реинтродукцияJettyзависимость.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
    <version>${spring-boot.version}</version>
</dependency>

Базовая настройка зависимостей выполнена.

Затем добавьте файл конфигурации проектаapplication.properties, главное настроитьNacos Serverадрес службы.

nacos:
  config:
    server-addr: {nacos-server-ip}:{nacos-server-port}
​
spring:
  application:
    name: springboot2-nacos-config

затем напишитеControllerпорт, позвонив в порт/config/getобслуживание, получитьuseLocalCacheсуществуетNacosПоследняя стоимость услуги. и установитьautoRefreshed(автоматическое обновление) естьtrue.

@Controller
@RequestMapping("config")
public class ConfigController {
​
    @NacosValue(value = "${useLocalCache:true}", autoRefreshed = true)
    private boolean useLocalCache;
​
    @RequestMapping(value = "/get", method = GET)
    @ResponseBody
    public boolean get() {
        return useLocalCache;
    }
}

Запустите веб-приложение, а затем вызовитеGet http://{ip}:45452/config/get, возвращаемое значение равноfalse, как и ожидалось. Установите значение через Configuration Manager наtrue, обновите вызывающий интерфейс, возвращаемое значениеtrue, на этом простая конфигурация сбора данных завершена.

В-четвертых, практика - зарегистрированное открытие услуг

Регистрация и обнаружение являются основными функциями реестра услуг. Регистрация является поставщиком услуги, а открытие является потребителем услуги. Давайте использовать это с примером.

4.1 Регистрация службы

Чтобы использовать функции реестра, мы должны ввести связанные зависимостиnacos-discovery-spring-boot-starter.

 <dependency>
     <groupId>com.alibaba.boot</groupId>
     <artifactId>nacos-discovery-spring-boot-starter</artifactId>
     <version>0.2.4</version>
 </dependency>

Далее нам нужно зарегистрировать собственный сервис в сервисном центре, а затем выставить интерфейс для внешнего запроса.

@RestController
@RequestMapping("/discovery")
@Slf4j
public class NacosDiscoveryController {
​
    @NacosInjected
    private NamingService namingService;
​
    @Value("${spring.application.name}")
    private String applicationName;
​
    @Value("${server.port}")
    private Integer serverPort;
​
    @PostConstruct
    public void registerInstance() throws NacosException {
        log.debug("serverPort:{}",serverPort);
        #填写的ip和port很关键,用于服务中心进行健康检查。
        namingService.registerInstance(applicationName,"127.0.0.1",serverPort);
    }
​
    @SneakyThrows
    @GetMapping(value = "/get")
    public List<Instance> get(@RequestParam String serviceName){
        log.debug("Nacos Discovery into get method...{}",serviceName);
        return namingService.getAllInstances(serviceName);
    }
​
}

методregisterInstance()Он выполняется при инициализации контейнера Spring и регистрации службы в реестре.Поскольку служба не находится в режиме кластера, имя службы кластера заполнять не нужно. методget()незащищенныйHTTP GetИнтерфейс, обеспечивающий запрос всех экземпляров указанного имени службы.

конфигурационный файлapplication.propertiesСодержание следующее, ключ к настройкеNacos Serverадрес службы.

nacos:
  config:
    server-addr: {nacos-server-ip}:{nacos-server-port}
​
spring:
  application:
    name: nacos.discovery.client

Запускаем проект, видим консоль управления Nacos, есть успешно зарегистрированные сервисы.

screenshot-121-89-226-47-8848-nacos-1631243392317.png

доступhttp://{ip}:{port}/discovery/get?serviceName=nacos.discovery.client, Успешно получила службу регистрации информации, следующим образом, показывая здоровый государственный пример информации.

{
        "instanceId": "221.19.226.48#8080#DEFAULT#DEFAULT_GROUP@@nacos.discovery.client", 
        "ip": "221.19.226.48", 
        "port": 8080, 
        "weight": 1, 
        "healthy": true, 
        "enabled": true, 
        "ephemeral": true, 
        "clusterName": "DEFAULT", 
        "serviceName": "DEFAULT_GROUP@@nacos.discovery.client", 
        "metadata": { }, 
        "instanceHeartBeatInterval": 5000, 
        "instanceIdGenerator": "simple", 
        "ipDeleteTimeout": 30000, 
        "instanceHeartBeatTimeOut": 15000
    }
]

4.2 Обнаружение службы

Обнаружение службы также довольно просто, зависимости соответствуют зарегистрированным службам, а информацию о конфигурации нужно только изменить.spring.application.name, а затем позвоните в сервис.

    @SneakyThrows
    @PostConstruct
    public void doConsume(){
        namingService.selectOneHealthyInstance("nacos.discovery.client");
        final RestTemplate restTemplate = new RestTemplate();
        String url = String.format("http://221.19.226.48:45451/discovery/get?serviceName=nacos.discovery.client", "221.19.226.48", 45451);
        String result = restTemplate.getForObject(url, String.class);
        System.out.println(String.format("请求URL:%s,响应结果:%s", url, result));
    }

Мальчик, ты не можешь видеть достаточно? нажмите на каменьПодробное описание, Просто нажмите и посмотрите, может быть, будут сюрпризы? Добро пожаловать в поддержкуНравится/Подписывайтесь/Комментируйте, ваша поддержка — моя самая большая мотивация для Gengwen, спасибо!