Dubbo Spring Boot Starter para desarrollar aplicaciones de microservicios

Requisitos medioambientales

  • Sistema: Windows, Linux, MacOS

  • JDK 8 y superior (se recomienda JDK17)

  • git

  • IntelliJ IDEA (opcional)

  • Ventana acoplable (opcional)

Introducción al proyecto

En esta tarea, se dividirá en tres submódulos para el desarrollo independiente, simulando la arquitectura de implementación en el entorno de producción.

.  // apache/dubbo-samples/1-basic/dubbo-samples-spring-boot
├── dubbo-samples-spring-boot-interface       // 共享 API 模块
├── dubbo-samples-spring-boot-consumer        // 消费端模块
└── dubbo-samples-spring-boot-provider        // 服务端模块

Como se muestra arriba, hay 3 módulos en total y  interface el módulo es  codependiente consumer con  provider dos módulos para almacenar la interfaz API utilizada por la comunicación RPC.

.  // apache/dubbo-samples/1-basic/dubbo-samples-spring-boot
├── dubbo-samples-spring-boot-interface       // 共享 API 模块
│   ├── pom.xml
│   └── src
│       └── main
│           └── java
│               └── org
│                   └── apache
│                       └── dubbo
│                           └── springboot
│                               └── demo
│                                   └── DemoService.java // API 接口
├── dubbo-samples-spring-boot-consumer        // 消费端模块
│   ├── pom.xml
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── org
│       │   │       └── apache
│       │   │           └── dubbo
│       │   │               └── springboot
│       │   │                   └── demo
│       │   │                       └── consumer
│       │   │                           ├── ConsumerApplication.java // 消费端启动类
│       │   │                           └── Task.java                // 消费端模拟调用任务
│       │   └── resources
│       │       └── application.yml       // Spring Boot 配置文件
├── dubbo-samples-spring-boot-provider        // 服务端模块
│   ├── pom.xml
│   └── src
│       └── main
│           ├── java
│           │   └── org
│           │       └── apache
│           │           └── dubbo
│           │               └── springboot
│           │                   └── demo
│           │                       └── provider
│           │                           ├── DemoServiceImpl.java         // 服务端实现类
│           │                           └── ProviderApplication.java     // 服务端启动类
│           └── resources
│               └── application.yml       // Spring Boot 配置文件
└── pom.xml

Lo anterior es la estructura de archivos del proyecto que se utilizará en este tutorial.

Implementación rápida (inicio directo basado en muestras)

Este capítulo le enseñará paso a paso cómo implementar y ejecutar un caso de uso basado en Dubbo x Spring Boot mediante unos pocos comandos simples.

Nota: Los detalles del código implementado en este capítulo se pueden encontrar en  el  almacén  apache/dubbo-samples1-basic/dubbo-samples-spring-boot  , que se explicará en el siguiente capítulo.

1. Obtenga el proyecto de prueba

Antes de comenzar todo el tutorial, necesitamos obtener el código del proyecto de prueba. Todos los códigos de casos de prueba de Dubbo se almacenan en  el almacén de apache/dubbo-samples  ; el siguiente comando puede ayudarle a obtener todos los códigos en el almacén de muestras.

git clone --depth=1 --branch master [email protected]:apache/dubbo-samples.git  

2. Inicie un registro simple

Para una aplicación de microservicio, el registro es un componente indispensable. Sólo a través del centro de registro, el consumidor puede descubrir con éxito la información de la dirección del servidor y luego realizar una llamada.

Para que este tutorial sea más fácil de comenzar, proporcionamos un iniciador simple basado en el registro de Apache Zookeeper. Si necesita implementar el registro en un entorno de producción, consulte el artículo sobre inicialización del entorno de producción para implementar un registro de alta disponibilidad.

Windows:
./mvnw.cmd clean compile exec:java -pl tools/embedded-zookeeper

Linux / MacOS:
./mvnw clean compile exec:java -pl tools/embedded-zookeeper

Docker:
docker run --name some-zookeeper -p 2181:2181 --restart always -d zookeeper

3. Módulo API de empaquetado local

Para compilar correctamente los módulos de servidor y consumidor, primero es necesario empaquetar e instalar los módulos localmente  dubbo-samples-spring-boot-interface .

./mvnw clean install -pl 1-basic/dubbo-samples-spring-boot
./mvnw clean install -pl 1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-interface

4. Inicie el proveedor de servicios.

Después de iniciar el registro, el siguiente paso es iniciar un proveedor de servicios que brinde servicios externamente. Las muestras correspondientes también se proporcionan en dubbo-samples, que se pueden extraer rápidamente con el siguiente comando.

Windows:  
./mvnw.cmd clean compile exec:java -pl 1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-provider -Dexec.mainClass="org.apache.dubbo.springboot.demo.provider.ProviderApplication"  

Linux / MacOS:
./mvnw clean compile exec:java -pl 1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-provider -Dexec.mainClass="org.apache.dubbo.springboot.demo.provider.ProviderApplication"  

注:需要开一个独立的 terminal 运行,命令将会保持一直执行的状态。  

Después de ejecutar el comando anterior, espere un momento hasta que Current Spring Boot Application is awaitaparezca el siguiente registro (), lo que significa que el proveedor de servicios se ha iniciado, lo que indica que el proveedor de servicios puede proporcionar servicios al mundo exterior.

2023-02-08 17:13:00.357  INFO 80600 --- [lication.main()] o.a.d.c.d.DefaultApplicationDeployer     :  [DUBBO] Dubbo Application[1.1](dubbo-springboot-demo-provider) is ready., dubbo version: 3.2.0-beta.4, current host: 30.221.128.96
2023-02-08 17:13:00.369  INFO 80600 --- [lication.main()] o.a.d.s.d.provider.ProviderApplication   : Started ProviderApplication in 9.114 seconds (JVM running for 26.522)
2023-02-08 17:13:00.387  INFO 80600 --- [pool-1-thread-1] .b.c.e.AwaitingNonWebApplicationListener :  [Dubbo] Current Spring Boot Application is await...

5. Inicie el consumidor del servicio.

El último paso es hacer que un consumidor de servicios llame al proveedor de servicios, que es el núcleo de la llamada RPC y proporciona un puente para que el consumidor de servicios llame al proveedor de servicios.

Windows:  
./mvnw.cmd clean compile exec:java -pl 1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-consumer -Dexec.mainClass="org.apache.dubbo.springboot.demo.consumer.ConsumerApplication"

Linux / MacOS:
./mvnw clean compile exec:java -pl 1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-consumer -Dexec.mainClass="org.apache.dubbo.springboot.demo.consumer.ConsumerApplication"

Después de ejecutar el comando anterior, espere un momento hasta que Hello worldaparezca el siguiente registro ( ): Los datos impresos se devuelven después de que el proveedor de servicios los procesa, lo que marca el éxito de una llamada de servicio.

2023-02-08 17:14:33.045  INFO 80740 --- [lication.main()] o.a.d.s.d.consumer.ConsumerApplication   : Started ConsumerApplication in 11.052 seconds (JVM running for 31.62)
Receive result ======> Hello world
2023-02-08 17:14:33.146  INFO 80740 --- [pool-1-thread-1] .b.c.e.AwaitingNonWebApplicationListener :  [Dubbo] Current Spring Boot Application is await...
Wed Feb 08 17:14:34 CST 2023 Receive result ======> Hello world
Wed Feb 08 17:14:35 CST 2023 Receive result ======> Hello world
Wed Feb 08 17:14:36 CST 2023 Receive result ======> Hello world
Wed Feb 08 17:14:37 CST 2023 Receive result ======> Hello world

Práctica práctica (desde la versión de desarrollo de código cero)

Este capítulo le enseñará cómo desarrollar una aplicación de microservicio desde cero a través de tutoriales paso a paso.

1. Inicie el registro

Para una aplicación de microservicio, el registro es un componente indispensable. Sólo a través del centro de registro, el consumidor puede descubrir con éxito la información de la dirección del servidor y luego realizar una llamada.

Para que este tutorial sea más fácil de comenzar, proporcionamos un iniciador simple basado en el registro de Apache Zookeeper. Si necesita implementar el registro en un entorno de producción, consulte el artículo sobre inicialización del entorno de producción para implementar un registro de alta disponibilidad .

Windows:
git clone --depth=1 --branch master [email protected]:apache/dubbo-samples.git
cd dubbo-samples
./mvnw.cmd clean compile exec:java -pl tools/embedded-zookeeper

Linux / MacOS:
git clone --depth=1 --branch master [email protected]:apache/dubbo-samples.git
cd dubbo-samples
./mvnw clean compile exec:java -pl tools/embedded-zookeeper

Docker:
docker run --name some-zookeeper -p 2181:2181 --restart always -d zookeeper

2. Inicializar el proyecto

A partir de esta sección, el proyecto se construirá y probará en base a IntelliJ IDEA.

imagen

Como se muestra arriba, se puede construir un proyecto básico.

Después de construir el proyecto básico, también necesitamos crear  dubbo-spring-boot-demo-interface y dubbo-spring-boot-demo-provider tres  dubbo-spring-boot-demo-consumer submódulos.

 

 

imagen

imagen

imagen

imagen

Después de crear los tres submódulos, debe crear las siguientes carpetas:

  1.  Crear paquete dubbo-spring-boot-demo-consumer/src/main/java en  org.apache.dubbo.springboot.demo.consumer

  2.  Crear paquete dubbo-spring-boot-demo-interface/src/main/java en  org.apache.dubbo.springboot.demo

  3.  Crear paquete dubbo-spring-boot-demo-provider/src/main/java en  org.apache.dubbo.springboot.demo.provider

 

imagen

La referencia final de la carpeta se muestra en la imagen de arriba.

3. Agregar dependencia de Maven

Después de inicializar el proyecto, primero debemos agregar las dependencias de Maven relacionadas con Dubbo.

pom.xml Para proyectos de varios módulos, primero debe configurar la información de dependencia en el proyecto principal  .

 

imagen

Edite  ./pom.xml este archivo y agregue la siguiente configuración.

    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>dubbo-spring-boot-demo-interface</module>
        <module>dubbo-spring-boot-demo-provider</module>
        <module>dubbo-spring-boot-demo-consumer</module>
    </modules>

    <properties>
        <dubbo.version>3.2.0-beta.4</dubbo.version>
        <spring-boot.version>2.7.8</spring-boot.version>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- Spring Boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- Dubbo -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-bom</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

Luego   configure las dependencias específicas en los dubbo-spring-boot-consumer dos  dubbo-spring-boot-provider módulos  .pom.xml

 

imagen

Edite  ./dubbo-spring-boot-consumer/pom.xml y  ./dubbo-spring-boot-provider/pom.xml agregue la siguiente configuración a ambos archivos.

    <dependencies>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-demo-interface</artifactId>
            <version>${project.parent.version}</version>
        </dependency>

        <!-- dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-reload4j</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- spring boot starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

    </dependencies>

En esta configuración, se definen las dependencias de dubbo y zookeeper (y el curador del conector correspondiente).

Después de agregar la configuración anterior, puede  Maven - Reload All Maven Projects actualizar las dependencias a través de IDEA.

4. Definir la interfaz del servicio.

La interfaz de servicio es el puente entre el consumidor y el servidor en Dubbo.

 

imagen

 Cree una interfaz bajo  el  dubbo-spring-boot-demo-interface módulo   , definida de la siguiente manera:org.apache.dubbo.samples.apiDemoService

package org.apache.dubbo.springboot.demo;

public interface DemoService {

    String sayHello(String name);
}

En  ,  este método GreetingsService está definido  .  Los servicios posteriores publicados por el servidor y los servicios suscritos por el consumidor se desarrollan sayHien torno  a la interfaz.GreetingsService

5. Definir la implementación del servidor.

Después de definir la interfaz de servicio, puede definir la implementación correspondiente en el lado del servidor. En comparación con el lado del consumidor, esta parte de la implementación es una implementación remota y no hay información relevante localmente.

imagen

 Cree una clase bajo  el dubbo-spring-boot-demo-provider módulo   , definida de la siguiente manera:org.apache.dubbo.samples.providerDemoServiceImpl

package org.apache.dubbo.springboot.demo.provider;

import org.apache.dubbo.config.annotation.DubboService;
import org.apache.dubbo.springboot.demo.DemoService;

@DubboService
public class DemoServiceImpl implements DemoService {

    @Override
    public String sayHello(String name) {
        return "Hello " + name;
    }
}

En  DemoServiceImpl , se implementa la interfaz  DemoService para que  sayHello el método regrese  Hello name.

Nota: DemoServiceImpl Se agregan  @DubboService anotaciones a la clase. A través de esta configuración, los servicios Dubbo se pueden publicar en función de Spring Boot.

6. Configure el archivo de configuración Yaml del lado del servidor.

Desde este paso hasta el paso 7, se configurará cierta información básica de Dubbo a través de Spring Boot.

Primero, creemos un archivo de configuración para el servidor.

 

imagen

Cree un archivo en   la carpeta de recursos  dubbo-spring-boot-demo-provider del módulo   , definido de la siguiente manera:resourcesapplication.yml

dubbo:
  application:
    name: dubbo-springboot-demo-provider
  protocol:
    name: dubbo
    port: -1
  registry:
    address: zookeeper://${zookeeper.address:127.0.0.1}:2181

En este archivo de configuración, se definen el nombre de la aplicación Dubbo, la información del protocolo Dubbo y la dirección de registro utilizada por Dubbo.

7. Configure el archivo de configuración YAML del lado del consumidor.

De manera similar, necesitamos crear un archivo de configuración para el consumidor.

imagen

Cree un archivo en   la carpeta de recursos  dubbo-spring-boot-demo-consumer del módulo   , definido de la siguiente manera:resourcesapplication.yml

dubbo:
  application:
    name: dubbo-springboot-demo-consumer
  protocol:
    name: dubbo
    port: -1
  registry:
    address: zookeeper://${zookeeper.address:127.0.0.1}:2181

En este archivo de configuración, se definen el nombre de la aplicación Dubbo, la información del protocolo Dubbo y la dirección de registro utilizada por Dubbo.

8. Configure la clase de inicio del servidor según Spring

Además de configurar el archivo de configuración Yaml, también necesitamos crear una clase de inicio basada en Spring Boot.

En primer lugar, primero creamos la clase de inicio del servidor.

 

imagen

 Cree una clase bajo  el  dubbo-spring-boot-demo-provider módulo   , definida de la siguiente manera:org.apache.dubbo.springboot.demo.providerApplication

package org.apache.dubbo.springboot.demo.provider;

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

@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

En esta clase de inicio, uno está configurado  ProviderApplication para leer el archivo de configuración definido en el paso 6 anterior  application.yml e iniciar la aplicación.

9. Configure la clase de inicio del consumidor basada en Spring

De manera similar, necesitamos crear una clase de inicio para el consumidor.

imagen

 Cree una clase bajo  el  dubbo-spring-boot-demo-consumer módulo   , definida de la siguiente manera:org.apache.dubbo.springboot.demo.consumerApplication

package org.apache.dubbo.springboot.demo.consumer;

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

@SpringBootApplication
@EnableDubbo
public class ConsumerApplication {

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

En esta clase de inicio, uno está configurado  ConsumerApplication para leer el archivo de configuración definido en el paso 7 anterior  application.yml e iniciar la aplicación.

10. Configurar tareas de solicitud de consumidores.

CommandLineRunnerAdemás de configurar la clase de inicio del lado del consumidor, también podemos crearla en función del modo Spring Boot. 

imagen

 

 Cree una clase bajo  el  dubbo-spring-boot-demo-consumer módulo   , definida de la siguiente manera:org.apache.dubbo.springboot.demo.consumerTask

package org.apache.dubbo.springboot.demo.consumer;

import java.util.Date;

import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.springboot.demo.DemoService;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class Task implements CommandLineRunner {
    @DubboReference
    private DemoService demoService;

    @Override
    public void run(String... args) throws Exception {
        String result = demoService.sayHello("world");
        System.out.println("Receive result ======> " + result);

        new Thread(()-> {
            while (true) {
                try {
                    Thread.sleep(1000);
                    System.out.println(new Date() + " Receive result ======> " + demoService.sayHello("world"));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    Thread.currentThread().interrupt();
                }
            }
        }).start();
    }
}

En  Task la clase, al @DubboReference obtener una suscripción RPC de Dubbo, esto  demoService se puede llamar directamente como una llamada local. runSe crea un hilo en el método para realizar la llamada

11. Inicie la aplicación.

A partir del paso 10, el código se desarrolló y esta sección iniciará todo el proyecto y lo verificará.

 

imagen

Lo primero es comenzar  org.apache.dubbo.samples.provider.Application , Después de un rato Current Spring Boot Application is awaitaparecerá el registro () que se muestra en la figura siguiente, lo que significa que el proveedor de servicios ha iniciado, lo que indica que el proveedor de servicios puede brindar servicios al mundo exterior.

[Dubbo] Current Spring Boot Application is await...

Luego comience. Después de un tiempo,  aparecerá org.apache.dubbo.samples.client.Application el registro ( ) como se muestra en la siguiente figura, lo que significa que el consumidor del servicio inició y llamó al servidor para obtener el resultado con éxito.Hello world

imagenimagen

 

Receive result ======> Hello world

 

Supongo que te gusta

Origin blog.csdn.net/leesinbad/article/details/132354432
Recomendado
Clasificación