Что такое нако?
Первый взгляд на официальное введение:
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 используется как центр конфигурации, и проверка пройдена.