Это 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На данный момент среда успешно установлена.
3. Практика - получите конфигурацию центра
В использованииSpring CloudинтегрированныйNacosРаньше мы использовалиSpring Boot. Для версии Nacos я использую0.2.4, это относительно новая версия.
3.1 Настройка конфигурации
Чтобы установить конфигурацию, мы можем использоватьNacosКонсоль управления, как показано на рисунке ниже, предварительно добавляемuseLocalCacheпараметры конфигурации.
После заполнения конфигурации сохраните и добавьте конфигурацию.
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, есть успешно зарегистрированные сервисы.
доступ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, спасибо!