Используйте nacos в качестве центра регистрации и настройки

Java

Что такое нако?

Первый взгляд на официальное введение:

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

Nacos помогает создавать, поставлять и управлять платформами микросервисов более гибко и легко. Nacos — это сервисная инфраструктура для создания современных архитектур приложений, основанных на «сервисах» (таких как парадигма микросервисов, облачная парадигма).

Официальный адрес:nacos.io/zh-cn/

Особенности нако

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

карта мозга нако

установка накосов

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

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

Используйте nacos в качестве центра регистрации и настройки

До использования nacos центр регистрации моей компании использовал eureka, а центром конфигурации был apollo Ctrip. nacos — это продукт с открытым исходным кодом, созданный отечественной компанией Alibaba, который объединяет две функции центра регистрации и центра конфигурации и имеет сильную поддержку сообщества, что соответствует привычкам китайцев.

Создать весенний облачный проект

Создайте модуль в родительском проекте и создайте поставщика услуг cloud-nacos-provider и потребителя услуг cloud-nacos-consumer.Информация о зависимости следующая:

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.yezi</groupId>
            <artifactId>cloud-nacos-api</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>

    </dependencies>

cloud-nacos-provider

Создать стартовый класс
package com.yezi;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * @Description:
 * @Author: yezi
 * @Date: 2020/7/22 14:17
 */
@EnableFeignClients(basePackages = {"com.yezi"})
@EnableDiscoveryClient
@SpringBootApplication
public class ProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

@EnableDiscoveryClient регистрирует службу в реестре.

@EnableFeignClients(basePackages = {"com.yezi"}) В этой статье используется имитация для включения имитации сканирования пакетов.

сервис предоставляет апи
package com.yezi.controller;


import com.yezi.api.ProviderApi;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description:
 * @Author: yezi
 * @Date: 2020/7/22 15:01
 */
@RefreshScope
@RestController
public class ProviderApiController implements ProviderApi {

    @Value("${name:123}")
    private String name;

    @Override
    public String say(@PathVariable("msg") String msg) {
        System.out.println("【---------from---------】" + msg);
        return "hello,consumer1";
    }

    @GetMapping("/config")
    public String config() {
        System.out.println("【---------from---------】" + name);
        return name;
    }


}

@RefreshScope аннотация локального обновления, позволяющая обновлять информацию о конфигурации в режиме реального времени.

@Value("${name:123}") Наиболее часто используемая информация о конфигурации вводится напрямую, по умолчанию 123, если в файле конфигурации есть информация, она получается из файла конфигурации. В локальном application.yml этой статьи такого свойства нет, а конфигурация имени вынесена в центр конфигурации

Создание информации о конфигурации в центре конфигурации

Идентификатор данных конфигурации nacos по умолчанию соответствует идентификатору службы.spring.application.nameплюс.yml, поэтому здесь создаются два файла конфигурации: nacos-provider.yml и nacos-consumer.yml.

Содержимое nacos-provider.yml:

server:
  port: 8082

name: y好卡机SD卡

Содержимое nacos-consumer.yml:

server:
  port: 8081
Настроить bootstrap.yml

Создайте bootstrap.yml

spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      config:
        enabled: false
        server-addr: 192.168.18.244:8848
        file-extension: yml
      discovery:
        server-addr: 192.168.18.244:8848

config.enabled, следует ли разрешить использование конфигурации центра конфигурации.

config.server-addr адрес центра конфигурации, который является адресом nacos

адрес реестра discovery.server-addr (адрес nacos)

Автор использовал в начале application.yml и обнаружил, что данные в центре конфигурации не вступили в силу.Проверив официальный сайт, я обнаружил, что начал действовать непосредственно используемый официальным сайтом bootstrap.yml. Поэтому обязательно используйте здесь bootstrap.yml. Разница между bootstrap.yml и application.yml заключается в следующем:

  • bootstrap.yml (bootstrap.properties) используется для выполнения при загрузке программы, а также используется для считывания конфигурационной информации ранее, например, может использоваться для настройки параметров, используемых в application.yml и т.д.

  • application.yml (application.properties) Информация о конфигурации приложения, которую можно использовать для настройки общедоступных параметров, которые будут использоваться в последующих модулях и т. д.

Отсюда мы знаем, что bootstrap.yml загружается перед application.yml.При использовании весеннего облака информация о конфигурации обычно загружается из центра конфигурации.Поэтому информация центра конфигурации помещается в bootstrap.yml для загрузки действительно необходимой конфигурации Информация.

Создать папку конфигурации

Создайте каталог конфигурации в каталоге ресурсов и создайте файл конфигурации application.yml в каталоге конфигурации. Цель создания файла конфигурации здесь — использовать его в качестве локальной конфигурации. Когда config.enabled=false, он не будет читаться центр конфигурации и будет напрямую читать информацию файла конфигурации в разделе config.

cloud-nacos-consumer

Потребитель сервиса и провайдер имеют один и тот же шаблон файла, здесь предоставляется только один контроллер задержки потребителя:

package com.yezi.controller;

import com.yezi.api.ProviderApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description:
 * @Author: yezi
 * @Date: 2020/7/22 15:03
 */
@RestController
public class ConsumerController {

    @Autowired
    private ProviderApi providerApi;


    @GetMapping("/say")
    public String test() {
        return providerApi.say("hello,provider");
    }

}

Вот объяснение, почему уровень API должен быть предоставлен отдельным модулем.При использовании имитации потребитель службы должен использовать API поставщика услуг и должен создать клиент с той же имитацией, что и поставщик.В целях экономии эту часть кода поместите. Эта часть извлекает модуль отдельно, который может быть введен как на стороне провайдера, так и на стороне потребителя.

Информация API выглядит следующим образом:

package com.yezi.api;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @Description:
 * @Author: yezi
 * @Date: 2020/7/22 16:35
 */
@FeignClient("nacos-provider")
public interface ProviderApi {

    @GetMapping("/provider/say/{msg}")
    String say(@PathVariable("msg") String msg);
}

Результат проверки запуска службы

Просмотрите список конфигурации nacos, как показано ниже.

Обнаружил, что 2 службы зарегистрированы в nacos center.

Протестируйте вызов службы реестра:

Доступ к потребительскому сервисуhttp://127.0.0.1:8081/say адрес, в конфигурационном центре указан порт 8081, локальный порт 8083, и получены следующие результаты:

nacos выступает в роли центра регистрации, и верификация проходится.

Протестируйте его как центр конфигурации:

Услуга провайдера доступаадрес http://127.0.0.1:8082/config, порт 8082 указан нами в конфигурационном центре, локальный порт 8084, а имя в конфигурационном центре настроено как yezi, и получены следующие результаты:

nacos используется как центр конфигурации, и проверка пройдена.