предисловие
С конца 2017 года, когда Dubbo, наиболее широко используемая среда RPC в области разработки Java, начала обновлять и поддерживать, Alibaba продолжает открывать исходный код экосистемы микросервисов Dubbo.Sentinel,Nacos,SeataВ ожидании платформы промежуточного программного обеспечения для микросервисов и запуска Spring Cloud Alibaba, чтобы предоставить универсальное решение для разработки микросервисов, Alibaba продолжает активно участвовать в сообществе Java и привносит новую жизненную силу в разработку микросервисов Java.
В этой статье основное внимание будет уделено изучению функций и использованию микросервисного компонента Nacos в качестве реестра.NacosЭто новый проект Alibaba с открытым исходным кодом в июле 2018 года.
Об имени Nacos: первые четыре буквы - это первые две буквы имени и конфигурации, последние
s
для обслуживания.
Основное содержание этой статьи следующее:
- Основное введение в Nacos
- Зачем использовать Nacos
- Регистрация и интеграция обнаружения последней версии сервисов Nacos и Rest/Dubbo
О Nacos /nɑ:kəʊs/
Динамическое обнаружение сервисов, управление конфигурацией и платформа управления сервисами, упрощающая создание облачных приложений.
Приведенное выше предложение взято с официальной домашней страницы Nacos, которая представляет собой краткое изложение общих функций Nacos.
В двух словах, Nacos представляет собой комбинацию центра регистрации и центра конфигурации, предоставляя простой в использовании набор функций, помогающий нам решать проблемы регистрации и обнаружения служб, настройки служб и управления службами, которые должны быть задействованы в микросервисах. разработка. Nacos также является одним из компонентов Spring Cloud Alibaba, отвечающим заРегистрация и обнаружение службы.
Во-первых, давайте посмотрим на официальный ответ Nacosхарактеристикаописывать:
- Обнаружение служб и мониторинг работоспособности служб
- Служба динамической настройки
- Служба динамического DNS
- Службы и управление их метаданными
- Постоянно добавляю...
Можно обнаружить, что все функции неразделимыСлужитьЭто слово «Служба» является первоклассным гражданином в мире Nacos, что указывает на то, что служба является самой важной ролью в Nacos.
Почему Накос
В текущей экосистеме микросервисов уже есть много компонентов с открытым исходным кодом для регистрации и обнаружения сервисов, таких как Eurka, ZooKeeper и Consul. Зачем использовать Nacos? Давайте посмотрим на простое сравнение этих фреймворков:
Платформа регистрации и обнаружения служб | CAP модель | консольное управление | общественная деятельность |
---|---|---|---|
Eureka | AP | служба поддержки | Низкий (версия 2.x с закрытым исходным кодом) |
Zookeeper | CP | не поддерживается | середина |
Consul | CP | служба поддержки | высокий |
Nacos | AP | служба поддержки | высокий |
Говорят, что Nacos имеет более 100 000 экземпляров, работающих внутри Alibaba, которые прошли тест различного крупномасштабного трафика, такого как Double Eleven.
Напротив, текущий Nacos прост в использовании как при развертывании, так и при использовании.Что еще более важно, документация завершена, а сообщество очень активно.
И Nacos, и нынешние основные экосистемы с открытым исходным кодом обеспечивают хорошую поддержку:
- Nacos — центр регистрации и настройки Dubbo.
- Nacos будет полностью совместим с Spring Cloud
- Nacos поддерживает интеграцию Service Mesh, интеграцию Kubernetes
Кроме того, Alibaba создает платформу для обнаружения сервисов, управления сервисами и трафиком, а также совместного использования сервисов через Dubbo + Nacos и ряд проектов с открытым исходным кодом. Он будет продолжать развиваться и развиваться в будущем. Я верю, что Nacos будет использоваться в большем количестве мест в будущем.
Накос в действии
Автономное развертывание
Подготовьте среду
Nacos полагается на среду Java для запуска, и когда вам нужно создать исполняемую программу для кода Nacos, у вас также должна быть среда Maven, поэтому вам необходимо обеспечить требования к среде перед развертыванием:
- 64-битная ОС, поддерживает Linux/Unix/Mac/Windows, рекомендуется Linux/Unix/Mac.
- 64 bit JDK 1.8+
- Maven 3.2.x+
Загрузить и установить
Последняя версия Nacos — 1.0.1.После упаковки Maven она будет храниться в текущем каталоге.distribution/target
Создайте два сжатых пакета подnacos-server-1.0.1.tar.gz
иnacos-server-1.0.1.zip
, вы можете распаковать любой и использовать его.
Распаковать и запустить
Здесь метод автономного развертывания Nacos использует команду-m standalone
, если это команда Windows, вы можете дважды щелкнуть напрямуюstartup.cmd
файл.
Когда в консоли появятся буквы Nacos, аNacos started successfully in stand alone mode
При появлении запроса это означает, что сервер Nacos был успешно запущен, и доступный в настоящее время адрес консоли Nacos также указан непосредственно на консоли.http://{ip}:8848/nacos/index.html
, нажмите, чтобы войти в интерфейс визуального управления Nacos, для доступа вам потребуется учетная запись и пароль, по умолчаниюnacos
.
После входа в систему вы можете увидеть меню основных функций Nacos на боковой панели веб-сайта: управление конфигурацией, управление службами, управление кластером, пространство имен. Для функций регистрации и обнаружения служб нам нужно только взглянуть на управление службами.
В настоящее время существует только одно подменю под названием «Список служб» в разделе «Управление службами», и отображаемое содержимое относительно простое, включая имя службы, группу, количество кластеров, общее количество экземпляров и количество запущенных экземпляров.
Когда новая служба регистрируется в Nacos через клиент Nacos, элемент списка будет добавлен.Мы также можем просматривать и редактировать сведения об услуге с помощью кнопок на панели управления.
Развертывание кластера
По сравнению с простой одномашинной развёрткой Nacos, кластерный метод развёртывания немного более хлопотный, следуя официальной документации, всё же немного изрыт, и требуются дополнительные корректировки. Чтобы использовать его в производственной среде, необходимо обеспечить высокую доступность Nacos, поэтому необходимо отработать операцию развертывания кластера.
Среда подготовки такая же, как и при развертывании на одном компьютере.Дополнительным требованием является то, что Nacos требуется 3 или более узлов Nacos для формирования кластера и используется MySQL в качестве источника данных, который в основном используется для сохранения данных конфигурации службы.
Давайте взглянем на официально рекомендуемую схему архитектуры развертывания кластера. Мы используем обратный прокси-сервер доменного имени, такой как Nginx, для загрузки нескольких IP-адресов узлов Nacos, и внешние клиенты могут получить к ним прямой доступ через доменные имена. Это не только читабельно, но и легко для понимания. изменить IP-адреса. Рекомендуется.
Добавить файл конфигурации кластера
на каждом узле Nacosconf
В директорию добавляем файл конфигурацииcluster.conf
, вы можете обратиться к тому же каталогуcluster.conf.example
файл, настройте IP-адрес и порт одного узла на строку, напримерip:port
Примечание: нельзя использовать в файлах конфигурации
127.0.0.1
илиlocalhost
, требуется реальный IP или доменное имя, иначе сервис не может быть зарегистрирован на узле кластера после запуска, подробнее см.NACOS ISSUE #1189.
Настроить базу данных MySQL
Nacos рекомендует использовать как минимум активный/резервный режим для баз данных в производственной среде или использовать базу данных с высокой доступностью.
Здесь для простоты используется только одна база данных. Сначала создайте новый с именемnacos_config
базу данных, используя предоставленнуюисходный файл инструкции sqlИмпорт исходных данных.
Затем в файле конфигурации каждого узла Nacosconf/application.properties
Добавьте конфигурацию подключения к базе данных в:
Наконец, каждый узел запускается отдельно в кластерном режиме, и по умолчанию он запускается в фоновом режиме.Информация о запуске должна быть запущена сlogs/logs/start.out
полученный из лог-файла.
Когда файл журнала появляется в последний разNacos started successfully in cluster mode.
Когда есть одна строка, это означает, что Nacos успешно запускается в кластерном режиме. В настоящее время мы также можем просмотреть информацию об узле, войдя в интерфейс управления кластером любой консоли Nacos.
Как видно из вышеизложенного, статус узлов Nacos в составе кластера делится наFOLLOWER
,LEADER
Во-вторых, похоже на знакомую нам архитектуру ведущий-ведомый.
На этом построение нашего кластерного режима также завершено. Далее давайте рассмотрим, как использовать Nacos для регистрации и обнаружения служб.
Реализовать регистрацию и обнаружение службы
Регистрация и обнаружение сервиса Rest
создание поставщика услуг
Создайте проект подпроекта с именемrest-provider
программа поставщика услуг,pom.xml
Конфигурация выглядит следующим образом:
Обратите внимание здесьspring-cloud-starter-alibaba-nacos-discovery
Версия 0.9.0, в которой используется версия клиента Nacos 1.0.0, а соответствующая версия Spring Boot должна быть версией 2.1.x.RELEASE.Выходные данные вики
Поэтому мы используем последнюю версию Spring Cloud Alibaba.0.9.0.RELEASE
, В соответствии с версией Spring Cloud Greenwich в конфигурацию POM родительского проекта Maven необходимо добавить следующее управление зависимостями:
После добавления зависимости реализуйте метод запроса Rest в классе начальной загрузки./echo
, и через@EnableDiscoveryClient
В аннотации указано, что это клиент Nacos, а аннотация — это собственная аннотация, предоставляемая Spring Cloud.Даже если вы переключитесь на Eureka в качестве реестра, эта аннотация будет использоваться.
Изменить файл конфигурации подпроектаapplication.properties
-
spring.application.name
Объявлено имя службы -
spring.cloud.nacos.discovery.server-addr
Адрес реестра Nacos указан
Для получения дополнительной информации об элементах конфигурации Nacos Starter см.Spring Cloud Alibaba Nacos Discovery
затем через класс начальной загрузкиRestProviderApplication
Запустите проект, войдите в консоль Nacos Server и просмотрите список услуг, чтобы увидеть поставщика услуг.rest-provider
Регистрация прошла успешно.
создание потребителя услуг
Таким же образом создаем проект потребителя услугrest-consumer
,pom.xml
зависимый иapplication.properties
настроить сprovider-consumer
Аналогично, здесь мы явно используем API LoadBalanceClient в сочетании с RestTemplate для использования службы.
-
Сначала добавьте в класс начальной загрузки
@EnableDiscoveryClient
аннотация -
создать другое имя
RestConsumerConfiguration
Класс конфигурации Java, внедренныйRestTemplate
. -
Создать
RestConsumerController
Контроллер для тестирования, предоставляющий метод запросаecho
, следующее: -
запускать
rest-cosumer
После проекта вы можете увидеть дополнительный сервис с именем в списке сервисов консоли Nacos Server.rest-consumer
сервис и доступ к нему прямо в браузереhttp://localhost:8082/echo
, ты увидишь:
Он очень прост в использовании? На самом деле, он не сильно отличается от Eureka. В дополнение к потреблению сервисов Rest таким образом, Nacos также поддерживает метод Feign. Давайте посмотрим, как это используется.
Использование Rest Services в фиктивном режиме
Сначала вам нужно ввести клиентские зависимости Feign:
Затем класс начальной загрузки добавляет аннотацию@EnableFeignClients
Чтобы включить функцию компонента Feign, напишитеEchoService
Интерфейс для вызова удаленных сервисов:
Нельзя использовать параметры метода интерфейса метода запроса Get.
@RequestParam
Параметр указывает имя параметра запроса, иначе Feign вызовет его через POST и получит код ошибки 405.
аннотация@FeignClient
Указывает имя вызываемого поставщика услуг,echo
Метод можно связать с интерфейсом Rest поставщика услуг с помощью аннотаций, предоставляемых Spring MVC, и при выполнении будет вызываться соответствующий метод запроса.
Наконец, нам просто нужно написать инъекциюEchoService
контроллерRestConsumerFeignController
Класс, предоставляющий интерфейс для вызова интерфейса.
После того же запуска откройте его напрямуюhttp://localhost:8082/echo/hi
, вы получите следующий вывод из браузера:
Регистрация и открытие сервисов Dubbo
Теперь давайте посмотрим, как Dubbo использует Nacos в качестве сервисного реестра для регистрации и обнаружения.На самом деле, пока вы использовали метод ZooKeeper, вы обнаружите, что он очень прост.
Сначала мы создаем подпроектdubbo-serivce
, файл POM добавляет следующие зависимости:
- Здесь мы используем Dubbo версии 2.6.5 для интеграции Nacos в соответствии с официальной рекомендацией.
-
dubbo-registry-nacos
Ключевой зависимостью Dubbo является использование Nacos в качестве реестра Текущая версия — 0.0.1.
Затем определите интерфейс службыDemoService
:
сервис-продюсер
Или производитель услуг на первом месте, добавьте классDemoServiceImpl
Реализовать сервисный интерфейс
Затем настройте Dubbo в конфигурации XML, просто нужноdubbo:registry
Адрес сервера Nacos можно настроить на элементе.
Наконец, используйте простой классBasicProvider
изmain
Метод напрямую запускает производителя службы и сохраняет процесс резидентным.
После обычного запуска мы можем напрямую перейти к списку служб консоли Nacos.Служба производителя Dubbo была успешно зарегистрирована в Nacos, и вы можете увидеть конкретные данные службы через детали, такие как порт службы, метод и скоро.
потребители услуг
Давайте вместе с производителем услуг посмотрим, как вызывать службы Dubbo через Nacos.
Во-первых, внедрите объект службы Dubbo через XML-конфигурацию.DemoService
, существуетdubbo:registry
Настройте адрес сервера Nacos на элементе.
Затем напишите простой классBasicConsumer
,существуетmain
Загрузите контейнер Spring в метод, получитеDemoService
объекта, делая вызовы RCP напрямую.
После запуска мы видим непрерывный вывод журнала из консоли IDE, указывающий на то, что вызов службы Dubbo через реестр Nacos выполнен успешно.
Эпилог
Эта статья в основном учит понимать Nacos, а также тому, как использовать функции регистрации и обнаружения службы Nacos, как интегрироваться со службой Rest и службой Dubbo. В будущем я продолжу углубленное изучение компонентов экосистемы микросервисов Spring Cloud Alibaba.Заинтересованные партнеры могут подписаться на мой публичный аккаунт WeChat, который будет обновляться каждый понедельник.
пример кода
Все фрагменты кода, задействованные в этой статье, находятся на следующих складах. Заинтересованные друзья могут обратиться к вам и изучить:
nacos-actions:GitHub.com/ Как будто впервые увидел 12138…
Экологическая поддержка:
- JDK 8
- Spring Boot 2.1.0
- Maven 3.6.0
Ссылаться на
- Чтобы поддержать экологическое развитие Dubbo, Alibaba запустила новый проект с открытым исходным кодом Nacos:Особенно Aliyun.com/articles/60…
- Официальная документация Nacos:что cos.IO/this-capable/docs/…
- Новый выбор для Spring Cloud Service Discovery — Alibaba Nacos Discovery:вооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо
- Инструкции по развертыванию кластера:что cos.IO/this-capable/docs/…
- НАКОС № 1189:GitHub.com/alibaba/вывезти…
- Как использовать Feign для создания многопараметрических запросов в Spring Cloud:ву ву краткое описание.com/fear/7 тест 46 из 0 злобный отчет...