Это 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, спасибо!