Реальная боевая демонстрация SpringBoot + Dubbo

Dubbo

предисловие

Создайте демо-версию SpringBoot+Dubbo+zookeeper.

Полный код смотрите по адресу:GitHub.com/CAI хорош/…

1. Установите среду zookeeper

Перед сборкой zookeeper убедитесь, что на текущем сервере уже есть среда JDK.

Я использую облачный сервер Alibaba.

Примечание. Если вы также используете облачный сервер, необходимо настроить группу безопасности, чтобы открыть порт zookeeper.


1.1 Сначала загрузите установочный пакет zookeeper

Зайдите в Интернет, чтобы скачать установочный пакет zookeeper и распаковать его на сервере.

1.2 Декомпрессия

tar -zxvf zookeeper-3.4.11.tar.gz
После распаковки измените имя папки, полученное после распаковки

mv zookeeper-3.4.11 zookeeper
Удалите установочный пакет zookeeper.

rm -rf zookeeper-3.4.11.tar.gz

1.3 Войдите в каталог zookeeper и создайте папку данных.

mkdir data
Перейдите в папку данных и выполните команду pwd, чтобы скопировать результирующее текущее местоположение каталога.


1.4 Войдите в каталог /zookeeper/conf, скопируйте zoo_sample.cfg и назовите его zoo.cfg.

cp zoo_sample.cfg zoo.cfg

1.5 Изменить файл конфигурации

использоватьvim zoo.cfg команда для изменения файла конфигурации

Измените атрибут dataDir в файле конфигурации:

dataDir=/usr/local/zookeeper/data


1.6 Начать тест

Перейдите в каталог /zookeeper/bin и выполните следующую команду, чтобы запустить zookeeper.

./zkServer.sh start
Посмотреть текущий статус смотрителя зоопарка

./zkServer.sh status


Или запустите команду netstat -lntup для просмотра состояния сети, вы можете увидеть, что номер порта 2181 zookeeper уже занят


На этом среда zookeeper завершена, и проект запущен.

2. Начните создавать проект

Проект, который я использую maven для создания здесь, используя springboot+dubbo+zookeeper

Проект разделен на три модуля


Функции трех модулей:
  • Интерфейс для поставщика услуг dubbo-api
  • поставщик услуг dubbo-provider
  • потребитель услуг dubbo-consumer

критические зависимости

<dependency>
    <groupId>com.alibaba.spring.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>

3. dubbo-api

Абстрактный интерфейс поставщика услуг, по которому потребители услуг могут звонить

package com.czh.provider.dubboprovider.serviceImpl.service;

public interface HelloService {
    String sayHello(String name);
}

4. dubbo-provider

В основном делится на следующие этапы:

  1. Создайте проект SpringBoot;
  2. Добавьте связанный пакет jar зависимостей интерфейса;
  3. Настройте информацию, связанную с dubbo, в файле конфигурации application.properties;
  4. Реализовать класс интерфейса;
  5. Написание класса запуска поставщика услуг
Структура проекта:


4.1 создание проекта dubbo-провайдера

Создайте проект SpringBoot, обратите внимание на проверку веб-модуля.

4.2 Файл pom вводит связанные зависимости

Связанный пакет jar зависимостей интерфейса необходимо импортировать. Будьте осторожны, чтобы изменить идентификатор группы и артефакт зависимости этого проекта и проекта dubbo-api на свои собственные.

<dependencies>
    <dependency>
        <groupId>com.czh.api</groupId>
        <artifactId>dubbo-api</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

4.3 Настройте информацию, связанную с dubbo, в файле конфигурации application.properties

Конфигурация очень проста, в основном благодаря аннотации dubbo @EnableDubbo. Подробнее см. в официальном описании dubbo.Хироши Ватанабэ.apache.org/this-talent/blog/…

# 配置端口
spring.application.name = dubbo-provider
server.port = 9090

#指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)
dubbo.application.name = dubbo-provider

demo.service.version = 1.0.0

dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880

#指定注册中心的位置
dubbo.registry.address = zookeeper://ip:2181

#统一设置服务提供方的规则
dubbo.provider.timeout = 1000

4.4 Реализация интерфейса

Примечание. Аннотация @Service используется Dubbo вместо Spring.

Поставщик услуг, содержащий фактический код реализации службы

package com.czh.provider.dubboprovider.serviceImpl;

import com.alibaba.dubbo.config.annotation.Service;
import com.czh.provider.dubboprovider.serviceImpl.service.HelloService;

@Service(version = "${demo.service.version}")
public class HelloServiceImpl implements HelloService {

    @Override
    public String sayHello(String name) {
        return "Hello " + name + ",This is springboot-dubbo test";
    }
}

4.5 Написание класса запуска поставщика услуг

Примечание. Не забудьте добавить аннотацию @EnableDubbo, чтобы включить автоматическую настройку Dubbo.

package com.czh.provider;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }

}

5. dubbo-consumer

В основном делится на следующие этапы:
  1. Создайте проект SpringBoot;
  2. Добавьте связанный пакет jar зависимостей интерфейса;
  3. Настройте информацию, связанную с dubbo, в файле конфигурации application.properties;
  4. Написание интерфейса вызова потребителя услуги
  5. Написание класса запуска потребителей услуг
Структура проекта:


Первые два шага такие же, как и у предыдущих поставщиков услуг, здесь я начинаю сразу с третьего шага.

5.3 Настройте информацию, связанную с dubbo, в файле конфигурации application.properties

В основном то же, что и поставщик услуг

spring.application.name = dubbo-consumer
server.port = 9091

#指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)
dubbo.application.name = dubbo-consumer

demo.service.version = 1.0.0

dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880

#指定注册中心的位置
dubbo.registry.address = zookeeper://ip:2181

#统一设置服务提供方的规则
dubbo.consumer.timeout = 5000

5.4 Напишите простой контроллер для вызова удаленных служб

package com.czh.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.czh.api.service.HelloService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloConsumerController {
    @Reference(version = "${demo.service.version}")
    private HelloService helloService;

    @RequestMapping("/sayHello/{name}")
    public String sayHello(@PathVariable("name") String name) {
        return helloService.sayHello(name);
    }

}

5.5 Написание класса запуска потребителя службы

package com.czh.consumer;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class DubboConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboConsumerApplication.class, args);
    }

}

6. Результаты испытаний

Вы можете видеть, что потребитель звонит поставщику услуг нормально


Загляните в zookeeper и обнаружите, что у нас есть зарегистрированные сервисные узлы.


7. Резюме

Следует сказать, что использование springboot+dubbo+zookeeper для создания проекта dubbo относительно просто, и официальный также зависит от интеграции Springboot.

Полный код смотрите по адресу:GitHub.com/CAI хорош/…