SpringBoot + Dubbo crea microservicios

Con el desarrollo de Internet, la escala de las aplicaciones de sitios web continúa expandiéndose, y las arquitecturas de aplicaciones verticales convencionales ya no pueden hacer frente a ella. La arquitectura de servicios distribuidos y la arquitectura de computación móvil son imperativas, y se necesita con urgencia un sistema de gobernanza para garantizar una evolución ordenada de la arquitectura.

Primero, ve a una imagen

Hablando de Dubbo, creo que todos estarán familiarizados con él. Un marco de servicio excelente y de alto rendimiento de código abierto de Alibaba Company puede permitir que las aplicaciones implementen funciones de entrada y salida del servicio a través de RPC de alto rendimiento, y se puede integrar sin problemas con el marco Spring.

 

 

Diagrama de arquitectura dubbo

Descripción del rol de nodo:

  • Proveedor : El proveedor de servicios que expone el servicio.
  • Consumidor : el consumidor del servicio que llama al servicio remoto.
  • Registro : el registro para el registro y descubrimiento de servicios
  • Monitor : un centro de monitorización que cuenta el número y el tiempo de las llamadas de servicio.
  • Contenedor : contenedor de servicio en ejecución

Dos, realización de ideas

Hoy en día, usamos el proceso de un usuario para elegir un producto para realizar un pedido y dividirlo en tres servicios comerciales: centro de usuarios, centro de productos y centro de pedidos ¡ Utilice Springboot + Dubbo para implementar una pequeña demostración!

El proceso de interacción del servicio es el siguiente:

Este artículo presenta principalmente la práctica de desarrollo e integración del marco de Springboot y Dubbo. La división de servicios comerciales reales es un proceso muy complicado, que es mucho más complicado que el que presentamos. Los tres servicios mencionados anteriormente son solo para la demostración del proyecto , ¡No te enredes demasiado por qué quieres dividirte así !

De acuerdo, no digamos demasiadas tonterías, ¡abramos!

  • 1. Cree 4 centos7 en la máquina virtual, elija cualquiera para instalar zookeeper
  • 2. Cree un proyecto de microservicio y escriba el código
  • 3. Implementar microservicios en centos7
  • 4. Prueba de llamada de servicio remoto

Tres, instalación del guardián del zoológico

在使用 Dubbo 之前,我们需要一个注册中心,目前 Dubbo 可以选择的注册中心有 zookeeper、Nacos 等,一般建议使用 zookeeper!

Primero, antes de instalar Zookeeper, necesita instalar y configurar JDK.Esta máquina usa Oracle Java8 SE.

  • Instale JDK (se puede ignorar si ya está instalado)
yum -y install java-1.8.0-openjdk
  • Ver la instalación de java
java -version

 

  • Una vez completada la instalación de JDK, descargue e instale Zookeeper
#创建一个zookeeper文件夹
cd /usr
mkdir zookeeper

#下载zookeeper-3.4.14版本
wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

#解压
tar -zxvf zookeeper-3.4.14.tar.gz

Cree directorios de datos y registros

#创建数据和日志存放目录
cd /usr/zookeeper/
mkdir data
mkdir log

#把conf下的zoo_sample.cfg备份一份,然后重命名为zoo.cfg
cd conf/
cp zoo_sample.cfg zoo.cfg

Configurar guardián del zoológico

#编辑zoo.cfg文件
vim zoo.cfg

  • Iniciar Zookeeper
#进入Zookeeper的bin目录
cd zookeeper/zookeeper-3.4.14/bin

#启动Zookeeper
./zkServer.sh start

#查询Zookeeper状态
./zkServer.sh status

#关闭Zookeeper状态
./zkServer.sh stop

Aparece el siguiente mensaje, que indica un inicio exitoso.

4. Introducción al proyecto

  • versión springboot: 2.1.1.RELEASE
  • versión del guardián del zoológico: 3.4.14
  • versión dubbo: 2.7.3
  • mybtais-plus versión: 3.0.6
  • Base de datos: mysql-8
  • Herramienta de construcción: maven
  • Módulos de servicio: centro de usuarios, centro de productos, centro de pedidos

Cinco, práctica de código

5.1, inicializar la base de datos

Primero, cree 3 bases de datos en el cliente mysql, a saber: dianshang-user,, dianshang-platformy dianshang-business.

  • En la base de datos dianshang-user, cree la tabla de usuarios tb_user e inicialice los datos

  • En la base de datos de la plataforma dianshang, cree la tabla de productos tb_product e inicialice los datos

  • En la base de datos de la plataforma dianshang, cree la tabla de pedidos tb_order y la tabla de detalles de pedidos tb_order_detail

5.2, crea un proyecto

Una vez finalizado el diseño de la tabla de la base de datos, cree un nombre para IDEA en dianshangel Springbootproyecto.

El catálogo final es el siguiente:

Descripción de la estructura del directorio:

  • dianshang-common: almacena principalmente algunas bibliotecas de herramientas públicas, todos los servicios se pueden utilizar
  • dianshang-business: centro de pedidos, donde el apimódulo proporciona principalmente la interfaz de exposición del servicio dubbo, y el providermódulo es un springbootproyecto que proporciona operaciones de procesamiento de servicios
  • dianshang-user: Centro de usuarios, donde los apimódulos y los providermódulos son similares en diseño
  • dianshang-platform: centro de productos básicos, donde los apimódulos y los providermódulos son similares en diseño

pomAgregar dubboy zookeepercliente en el padre de archivos , todos los proyectos dependientes pueden ser utilizados.

<!-- lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.4</version>
    <scope>provided</scope>
</dependency>

<!-- Dubbo Spring Boot Starter -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
</dependency>
<!-- 因为使用的是 zookeeper 作为注册中心,所以要添加 zookeeper 依赖 -->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.13</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!--使用curator 作为zookeeper客户端-->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>4.2.0</version>
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.2.0</version>
</dependency>

Recordatorio : cuando configuré el entorno, encontré un hoyo. La zookeeperversión del proyecto depende de la versión del servidor. Debe ser lo más consistente posible. Por ejemplo, zookeeperla versión del servidor en este ejemplo lo es 3.4.14, así que cuando confíe en la zookeeperbiblioteca de archivos, trate de mantenerla también. ¡Consistente, si confías en la 3.5.xversión zookeeper, todo tipo de monstruos y fantasmas reportarán errores cuando comience el proyecto!

5.3, crea un proyecto de centro de usuarios

En IDEA, cree dianshang-usersubmódulos y confíe en dianshang-commonmódulos

<dependencies>
    <dependency>
        <groupId>org.project.demo</groupId>
        <artifactId>dianshang-common</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

Al mismo tiempo, crear dianshang-user-providery dianshang-user-apimódulo.

  • dianshang-user-api: principalmente proporciona exposición de interfaz a otros servicios
  • dianshang-user-provider: similar a un proyecto web, principalmente responsable del negocio básico crudy que se basa en dianshang-user-apimódulos

5.3.1, configurar el servicio dubbo

Configure el servicio en dianshang-user-providerel application.ymlarchivo de la dubbosiguiente manera:

#用户中心服务端口
server:
  port: 8080
#数据源配置
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: "jdbc:mysql://localhost:3306/dianshang-user"
      username: root
      password: 111111
#dubbo配置
dubbo:
  scan:
    # 包名根据自己的实际情况写
    base-packages: org.project.dianshang.user
  protocol:
    port: 20880
    name: dubbo
  registry:
    #zookeeper注册中心地址
    address: zookeeper://192.168.0.107:2181

5.3.2, interfaz de exposición de servicio de escritura y clase de implementación

En el dianshang-user-apimódulo, cree una UserApiinterfaz y devuelva el objeto de parámetro UserVo.

public interface UserApi {

    /**
     * 查询用户信息
     * @param userId
     * @return
     */
    UserVo findUserById(String userId);
}

Entre ellos UserVo, se requiere la serialización, de la siguiente manera:

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class UserVo implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 用户ID
     */
    private String userId;

    /**
     * 用户中文名
     */
    private String userName;
}

En el dianshang-user-providermódulo, escriba la UserApiclase de implementación de la interfaz de la siguiente manera:

@Service(interfaceClass =UserApi.class)
@Component
public class UserProvider implements UserApi {

    @Autowired
    private UserService userService;

    @Override
    public UserVo findUserById(String userId) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
        queryWrapper.eq("user_id",userId);
        User source = userService.getOne(queryWrapper);
        if(source != null){
            UserVo vo = new UserVo();
            BeanUtils.copyProperties(source,vo);
            return vo;
        }
        return null;
    }
}

 

Continuará. . . .

Supongo que te gusta

Origin blog.csdn.net/suifeng629/article/details/107134562
Recomendado
Clasificación