Перед тем как приступить к практической работе, давайте кратко ознакомимся с несколькими концепциями: Dubbo, RPC, распределенными системами. Цель данной статьи — помочь вам использовать SpringBoot + Dubbo для создания простой распределенной системы. Поэтому я кратко объясню эти концепции, не углубляясь в детали.
Распределенные системы или SOA (Service-Oriented Architecture) важны тем, что они ориентированы на предоставление услуг. Проще говоря, распределенные системы — это когда весь функционал системы разбивается на отдельные сервисы, которые размещаются на разных серверах для снижения нагрузки на каждый отдельный сервис, увеличения параллельной обработки и улучшения производительности. Например, система электронной коммерции может быть разделена на отдельные сервисы, такие как система заказов, система товаров, система входа и т.д.
Мы можем использовать Dubbo как мост для распределенных систем, но что такое Dubbo?
Dubbo был открыт компанией Alibaba, а затем перешел в Apache. Именно благодаря Dubbo все больше компаний начинают использовать и принимать распределенные архитектуры.
Теперь давайте кратко рассмотрим архитектуру Dubbo, чтобы лучше понять его.
Теперь давайте рассмотрим архитектуру Dubbo. Мы будем использовать Zookeeper в качестве центра регистрации, что рекомендовано официальной документацией Dubbo.
Краткое описание узлов:- Provider — сервис, предоставляющий услуги
Описание взаимодействия:
RPC (Remote Procedure Call) — удалённый вызов процедур, это протокол, который позволяет запрашивать услуги с удалённого компьютера через сеть, не заботясь о низкоуровневых сетевых технологиях. Например, два разных сервиса A и B размещены на разных машинах. Как сервис A может вызвать метод сервиса B? Можно использовать HTTP-запросы, но это может быть медленно и оптимизация может быть недостаточной. Создание RPC было направлено на решение этой проблемы.
Если вы разрабатываете распределённые системы, вы можете использовать HTTP-интерфейсы для взаимодействия, но почему стоит использовать Dubbo?
На мой взгляд, основные причины использования Dubbo заключаются в следующих четырёх характеристиках:
Перед установкой Zookeeper убедитесь, что на вашей машине уже установлен JDK.
Я использую CentOS 7.4 на сервере Aliyun. Обратите внимание: если вы также используете сервер Aliyun, вам необходимо настроить группу безопасности, иначе ваше приложение не сможет подключиться к серверу Zookeeper. Это я упомяну в дальнейшем.
Скачайте ZooKeeper с http://mirror.bit.edu.cn/apache/zookeeper/ и загрузите на Linux. Можно использовать встроенные функции для передачи файлов, такие как Xshell.
Или используйте команду wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz
для скачивания ZooKeeper (версия 3.4.12 была самой новой стабильной версией на момент написания статьи, вы можете изменить её в зависимости от ваших нужд).
tar -zxvf zookeeper-3.4.12-alpha.tar.gz
После распаковки измените имя распакованной директории
mv zookeeper-3.4.12 zookeeper
Удалите архив ZooKeeper
rm -rf zookeeper-3.4.12.tar.gz
mkdir data
Перейдите в директорию data и выполните команду pwd
, чтобы скопировать текущий путь (это те слова, которые я выделил красным цветом).
cp zoo_sample.cfg zoo.cfg
Используйте команду vim zoo.cfg
для редактирования конфигурационного файла.
vim файл ------> введите : для перехода в командный режим ------> нажмите i для перехода в режим редактирования ------> редактируйте файл ------> нажмите Esc для перехода в режим командной строки ------> введите :wq для сохранения и выхода или :q! для выхода без сохранения.
Измените атрибут dataDir в конфигурационном файле:
dataDir=/usr/local/zookeeper/data
Перейдите в директорию /zookeeper/bin и выполните следующую команду:
./zkServer.sh start
Выполните команду ./zkServer.sh status
, чтобы проверить текущее состояние ZooKeeper.
Или выполните команду netstat -lntup
, чтобы проверить состояние сети, и убедитесь, что порт 2181 используется ZooKeeper.
Обратите внимание на возможные проблемы, если вы не отключили брандмауэр!Если вы используете серверы от Alibaba Cloud, убедитесь, что вы правильно настроили соответствующие группы безопасности.
Основные шаги:
Структура проекта:
Проект dubbo-interface будет собран в jar-пакет, его основная функция — предоставление интерфейсов.
File -> New -> Module..., затем выберите проект типа Maven, далее следуйте инструкциям.
package top.snailclimb.service;
public interface HelloService {
public String sayHello(String name);
}
Щелкните по Maven Projects, затем выберите install, чтобы создать jar-пакет.
Основные шаги:1. Создание проекта Spring Boot; 2. Добавление зависимостей jar-пакетов для Dubbo, Zookeeper и интерфейсов; 3. Настройка параметров Dubbo в файле application.properties; 4. Реализация класса интерфейса; 5. Создание запускающего класса поставщика услуг.Структура проекта:
Создайте проект SpringBoot, убедитесь, что выбран модуль web. Если вы не знаете, как это сделать, обратитесь к следующей статье, она очень подробная.
Необходимо включить зависимости для Dubbo, Zookeeper и интерфейсов. Обратите внимание, что groupId и artifactId для этого проекта и проекта dubbo-interface должны быть изменены на свои собственные. Jar-файл для интеграции Dubbo с Spring Boot можно найти здесь. Jar-файл для Zookeeper можно найти на 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>
Конфигурация проста, благодаря специальному аннотированию @EnableDubboConfiguration
, которое обеспечивает автоматическую конфигурацию Dubbo.```properties
server.port=8333
spring.dubbo.application.name=dubbo-provider spring.dubbo.application.registry=zookeeper://ip-адрес:2181
### 4. Реализация интерфейсов
Обратите внимание: аннотация `@Service` используется Dubbo, а не Spring. Кроме того, после добавления аннотации `@Service` от Dubbo, необходимо добавить
```java
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 "Привет " + name;
}
}
Убедитесь, что добавлено аннотирование @EnableDubboConfiguration
для включения автоматической конфигурации Dubbo.
package top.snailclimb.dubboconsumer;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
// Включение автоматической конфигурации Dubbo
@EnableDubboConfiguration
public class DubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboConsumerApplication.class, args);
}
}
Основные шаги:
Структура проекта:
Шаги 1, 2 и 3 совпадают с шагами для сервиса-поставщика, поэтому начнем с шага 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("мир");
System.out.println(helloService.sayHello("SnailClimb"));
return hello;
}
}
Посетите страницу http://localhost:8330/hello через браузер. В ответе должно быть отображено "Привет, мир". В консоли должно появиться сообщение "Привет, SnailClimb", что соответствует ожиданиям. Эксперимент по созданию первого простого распределенного сервиса с использованием SpringBoot и Dubbo завершен успешно!
Код доступен по адресу: https://github.com/Snailclimb/springboot-guide/tree/master/source-code/advanced/springboot-dubbo
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )