содержание:
-
Используйте SpringBoot+Dubbo для создания простого распределенного сервиса.
- Прежде чем приступить к бою, давайте рассмотрим несколько важных концепций.
- Начало боя 1: установка и строительство среды зоопарка
- Начало боя 2: Реализовать сервисный интерфейс dubbo-interface
- Начало боя 3: Внедрение поставщика услуг dubbo-provider
- Начало боя 4: Реализовать сервис-потребитель dubbo-consumer
Используйте SpringBoot+Dubbo для создания простого распределенного сервиса.
Прежде чем приступить к бою, давайте рассмотрим несколько важных концепций.
Прежде чем приступить к реальной битве, давайте кратко разберемся со следующими понятиями: Dubbo, RPC, распределенный, потому что цель этой статьи — использовать SpringBoot+Dubbo для создания простого распределенного сервиса, поэтому я лишь кратко приведу эти понятия. Давайте популяризируем это, мы не будем проводить углубленное исследование.
Что распространяется?
Распределенная или распределенная SOA важна для сервис-ориентированности.Проще говоря, распределенная состоит в том, что мы разделяем всю систему на разные службы, а затем размещаем эти службы на разных серверах, чтобы уменьшить нагрузку на одну службу и улучшить параллелизм и производительность. Например, систему электронной коммерции можно просто разделить на систему заказов, товарную систему, систему авторизации и так далее.
Мы можем использовать Dubbo в качестве моста для распределенных систем, так что же такое Dubbo?
Что такое Дубу?
Apache Dubbo (инкубация) |ˈdʌbəʊ| — это высокопроизводительная облегченная среда Java RPC с открытым исходным кодом, которая обеспечивает три основные возможности: ориентированный на интерфейс удаленный вызов методов, интеллектуальную отказоустойчивость и балансировку нагрузки, а также автоматическую регистрацию и обнаружение служб. Проще говоря, Dubbo — это инфраструктура распределенных сервисов, предназначенная для предоставления высокопроизводительных и прозрачных решений удаленного вызова RPC-сервисов, а также решений для управления сервисами SOA.
У Dubbo в настоящее время почти 23 тысячи звезд, адрес Dubbo на Github:GitHub.com/Apache/Inc U…Благодаря высокой популярности он занял третье место после vue.js и ECharts.
Dubbo был открыт Али, а позже присоединился к Apache. Официально из-за появления Dubbo все больше компаний стали использовать и принимать распределенную архитектуру.
Давайте кратко рассмотрим архитектуру Dubbo и углубим наше понимание Dubbo.
Даббо Архитектура
Давайте взглянем на архитектуру Dubbo, позже мы будем использовать zookeeper в качестве центра регистрации, который также официально рекомендован Dubbo.
Краткое описание вышеперечисленных узлов:
- ProviderПоставщик услуг, предоставляющий услугу
- ConsumerПотребитель службы, вызывающий удаленную службу
- RegistryРеестр для регистрации и обнаружения служб
- MonitorЦентр мониторинга, который подсчитывает сервисные вызовы и время вызова
- Containerработающий сервисный контейнер
Описание вызывающих отношений:
- Контейнер службы отвечает за запуск, загрузку и работу поставщика службы.
- Когда поставщик услуг запускается, он регистрирует предоставляемую им услугу в реестре.
- Когда потребитель службы запускается, он подписывается на необходимые ему службы в реестре.
- Реестр возвращает список адресов поставщика услуг потребителю.Если есть изменение, реестр передаст данные об изменении потребителю на основе постоянного соединения.
- Потребитель услуги из списка адресов провайдера выбирает провайдера для вызова на основе алгоритма мягкой балансировки нагрузки и, если вызов завершается неудачей, выбирает другого провайдера для вызова.
- Потребители и поставщики услуг накапливают в памяти количество звонков и время звонков и регулярно каждую минуту отправляют статистические данные в центр мониторинга.
Когда мы говорили о Dubbo, мы упомянули, что Dubbo на самом деле является фреймворком RPC, так что же такое RPC? Я думаю, вы поймете, прочитав мое введение в RPC ниже!
Что такое РПЦ?
RPC (удаленный вызов процедур) — удаленный вызов процедур, который представляет собой протокол для запроса услуг от удаленной компьютерной программы по сети без знания базовой сетевой технологии. Например, на двух разных машинах развернуты две разные службы A и B. Что, если служба A захочет вызвать метод службы B? Использование HTTP-запросов, конечно, возможно, но это может быть медленнее, а некоторые оптимизации сделаны не очень хорошо. Появление RPC призвано решить эту проблему.
Зачем использовать Дуббо?
Если вы хотите разрабатывать распределенные программы, вы также можете общаться напрямую на основе интерфейса HTTP, но зачем использовать Dubbo?
Я думаю, что мы можем в основном использовать Dubbo из следующих четырех функций, предоставляемых Dubbo:
- балансировки нагрузки—— Когда одна и та же служба развертывается на разных машинах, следует вызывать службу на этой машине.
- Генерация ссылки на сервисный вызов——Как сервисы вызывают друг друга
- Давление доступа к сервису и статистика продолжительности—— Где основное давление текущей системы, и как расширить и оптимизировать
- понижение уровня обслуживания- Вызов службы резервного копирования после зависания службы
Начало боя 1: установка и строительство среды зоопарка
Я использую облачный сервер Alibaba CentOS 7.4.Примечание: если у вас также есть облачный сервер Alibaba, вы должны настроить группу безопасности, иначе ваше приложение не сможет получить доступ к вашему серверу zookeeper, о чем я упомяну позже.
1. Скачать
пройти череззеркало.биты.quota.capable/apache/zooke…Скачайте по этой ссылке, затем загрузите в Linux. (Можно сказать, что функция передачи файлов, которая поставляется с Xhell)
Или используйте непосредственно в Linuxwget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz
Загрузка команды (номер версии 3.4.12 — последняя стабильная версия на момент написания этой статьи, вы можете изменить ее в соответствии с реальной ситуацией)
2. Распаковать
tar -zxvf zookeeper-3.4.12-alpha.tar.gz
После распаковки измените имя папки, полученное после распаковки
mv zookeeper-3.4.12 zookeeper
Удалите установочный пакет zookeeper.
rm -rf zookeeper-3.4.12.tar.gz
3. Перейдите в каталог zookeeper и создайте папку данных.
mkdir data
Перейдите в папку данных и выполнитеpwd
команду, скопируйте полученное текущее местоположение каталога (то есть текст, который я обвел красным)
4. Перейдите в каталог /zookeeper/conf, скопируйте zoo_sample.cfg и назовите его zoo.cfg.
cp zoo_sample.cfg zoo.cfg
5. Измените файл конфигурации
использоватьvim zoo.cfg
команда для изменения файла конфигурации
vim файл------> введите файл-----> командный режим------> нажмите i, чтобы войти в режим редактирования-----> отредактируйте файл -------> нажмите Esc для входа в режим нижней строки -----> введите: wq/q!(ввод wq означает запись содержимого и выход, то есть сохранение; ввод q! означает принудительный выход без сохранения.)
Измените атрибут данных в файле конфигурации:
dataDir=/usr/local/zookeeper/data
6. Запустите тест
Перейдите в каталог /zookeeper/bin и выполните следующую команду
./zkServer.sh start
воплощать в жизнь./zkServer.sh status
Просмотр текущего состояния зоопарка.
или бегиnetstat -lntup
Команда для просмотра состояния сети, вы можете видеть, что номер порта 2181 zookeeper был занят
Учтите, что могут быть проблемы с не выключенным брандмауэром! ! !
Если вы используете сервер Alibaba Cloud, обратите внимание на настройку соответствующих групп безопасности:
- Перейти на страницу группы безопасности этого экземпляра
- Выберите правила конфигурации
- Выберите «Добавить правило группы безопасности», а затем настройте, как показано ниже.
Предложение перед началом реального боя: попробуйте создать новую папку, а затем поместить проект интерфейса, поставщика услуг и потребителя услуг в эту папку позже.
Начало боя 2: Реализовать сервисный интерфейс dubbo-interface
В основном делится на следующие этапы:
- Создайте проект Maven;
- Создать класс интерфейса
- Упакуйте проект в пакет jar для использования другими проектами.
Структура проекта:
Dubbo-interface позже помечен как пакет jar, и его роль заключается только в предоставлении интерфейса.
1. создание проекта dubbo-интерфейса
File->New->Module..., а затем выберите проект типа Maven, а остальные шаг за шагом следуйте подсказкам.
2. Создайте класс интерфейса
package top.snailclimb.service;
public interface HelloService {
public String sayHello(String name);
}
3. Упакуйте проект в пакет jar для использования другими проектами.
Нажмите Maven Projects справа и выберите install , так что сокровище jar готово.
Начало боя 3: Внедрение поставщика услуг dubbo-provider
В основном делится на следующие этапы:
- Создайте проект SpringBoot;
- Добавьте пакеты dubbo, zookeeper и связанные с ними jar-пакеты интерфейса;
- Настройте информацию, связанную с dubbo, в файле конфигурации application.properties;
- Реализовать класс интерфейса;
- Написание класса запуска поставщика услуг
Структура проекта:
1. создание проекта dubbo-провайдера
Создайте проект SpringBoot, обратите внимание на проверку веб-модуля. Если вы не можете его создать, вы можете проверить следующую статью: Можно сказать, что это очень подробно.
2. Файл pom вводит связанные зависимости
Необходимо ввести dubbo , zookeeper и связанные с ним пакеты зависимостей jar интерфейса. Обратите внимание на изменение groupId и ArtiftId зависимости этого проекта и проекта dubbo-interface на свои. Пакет jar интегрированного весеннего ботинка dubbo можно найти здесь.dubbo-spring-boot-starter. Банка смотрителя зоопарка находится вРепозиторий MavenНайдите zkclient, чтобы найти его.
<dependency>
<groupId>top.snailclimb</groupId>
<artifactId>dubbo-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--引入dubbo的依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- 引入zookeeper的依赖 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
3. Настройте информацию, связанную с dubbo, в файле конфигурации application.properties.
Конфигурация очень проста, в основном благодаря интеграции springboot с эксклюзивным интерфейсом dubbo.@EnableDubboConfiguration
Автоматическая настройка Dubbo обеспечивается аннотациями.
# 配置端口
server.port=8333
spring.dubbo.application.name=dubbo-provider
spring.dubbo.application.registry=zookeeper://ip地址:2181
4. Реализовать интерфейс
Уведомление:@Service
Аннотации предоставляются Dubbo вместо Spring. Кроме того, добавьте предоставленный Dubbo@Service
После аннотации необходимо добавить
package top.snailclimb.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
import top.snailclimb.service.HelloService;
@Component
@Service
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String name) {
return "Hello " + name;
}
}
5. Написание курса запуска поставщика услуг
Примечание: не забудьте добавить@EnableDubboConfiguration
Обратите внимание, чтобы включить автоматическую настройку Dubbo.
package top.snailclimb;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
// 开启dubbo的自动配置
@EnableDubboConfiguration
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
Начало боя 4: Реализовать сервис-потребитель dubbo-consumer
В основном делится на следующие этапы:
- Создайте проект SpringBoot;
- Добавьте пакеты dubbo, zookeeper и связанные с ними jar-пакеты интерфейса;
- Настройте информацию, связанную с dubbo, в файле конфигурации application.properties;
- писать тестовые классы;
- Написание класса запуска потребителей услуг
- Тестовый эффект
Структура проекта:
Шаги 1, 2 и 3 такие же, как и для поставщика услуг, здесь мы начинаем непосредственно с шага 4.
4. Напишите простой контроллер для вызова удаленных служб
package top.snailclimb.dubboconsumer;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.snailclimb.service.HelloService;
@RestController
public class HelloController {
@Reference
private HelloService helloService;
@RequestMapping("/hello")
public String hello() {
String hello = helloService.sayHello("world");
System.out.println(helloService.sayHello("SnailClimb"));
return hello;
}
}
5. Написание класса запуска потребителей услуг
package top.snailclimb.dubboconsumer;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubboConfiguration
public class DubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboConsumerApplication.class, args);
}
}
6. Проверьте эффект
доступ через браузерhttp://localhost:8330/helloСтраница возвращается к Hello world, а консоль выводит Hello SnailClimb Как и ожидалось, первый простой эксперимент с распределенным сервисом, построенный с использованием SpringBoot+Dubbo, прошел успешно!
ThoughtWorks принимает Java-инженера. Сосредоточьтесь на обмене знаниями Java! Автор учебного пособия по Java с открытым исходным кодом — JavaGuide (12 000+ звезд). Многие статьи на официальном аккаунте были перепечатаны крупными техническими сообществами. Ответьте на ключевое слово "1" в фоновом режиме официального аккаунта, чтобы получить копию выбранных мной ресурсов Java!