Conexión remota con Dubbo, Zookeeper y Spring Boot en entorno distribuido

Conexión remota con Dubbo, Zookeeper y Spring Boot en entorno distribuido

Versión de Spring Boot: Aliyun 2.3.7

Objetivo de la implmeentación

Permitir que un consumidor en el主机 pueda llamar a los servicios implementados en un servidor virtual.

Configuración del proyecto

Configuración del pom.xml

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.18</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
    <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>5.1.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.6.2</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Configuración del proveedor

El proveedor se implementa en un servidor virtual con Ubuntu 20.04.

Pasos de configuración:

  1. Configurar los puertos 2181 y 21880 en la máquina virtual.
  2. Descargar el paquete de Zookeeper que incluya la carpeta bin.
  3. Configurar el archivo zoo.cfg copiando zoo_sample.cfg.
  4. Iniciar el servicio de Zookeeper.

Archivo application.yml para el proveedor:

# Nombre de la aplicación
spring.application.name=proveedor-servidor
# Puerto de acceso web
server.port=8281

# Configuración de registro
dubbo.application.name=proveedor-servidor
dubbo.registry.address=zookeeper://192.168.241.128:2181
dubbo.scan.base-packages=com.jupiter.service
dubbo.protocol.port=21880

Implementación del servicio:

public interface BoletoService {
    String obtenerBoleto();
}

@Component
@DubboService(interfaceName = "com.jupiter.service.BoletoService")
public class BoletoServiceImpl implements BoletoService, Serializable {
    @Override
    public String obtenerBoleto() {
        return "Se obtuvo un boleto, solicitud del consumidor: " + RpcContext.getContext().getRemoteAddress();
    }
}

Configuración del consumidor

El consumidor se implementa en el主机.

Archivo application.yml para el consumidor:

# Nombre de la aplicación
spring.application.name=consumidor-servidor
# Puerto de acceso web
server.port=8182

# Configuración de registro
dubbo.application.name=consumidor-servidor
dubbo.registry.address=zookeeper://192.168.241.128:2181
dubbo.protocol.port=21880
dubbo.consumer.check=false

Archivo application.properties para configuración avanzada:

dubbo:
  registry:
    timeout: 200000
  service:
    timeout: 200000
  consumer:
    timeout: 200000
  provider:
    timeout: 200000

Implementación del consumo del servicio:

@Service
public class UsuarioService {
    @DubboReference(url = "dubbo://192.168.241.128:21880/")
    private BoletoService boletoService;

    public String comprarBoleto() {
        String boleto = boletoService.obtenerBoleto();
        System.out.println("Boleto obtenido del registro central: " + boleto);
        return boleto;
    }
}

Pruebas

Clase de prueba:

@SpringBootTest
class ConsumidorServidorApplicationTests {
    @Autowired
    private UsuarioService usuarioService;

    @Test
    void testConseguirBoleto() {
        usuarioService.comprarBoleto();
    }
}

Resultados esperados:

Boleto obtenido del registro central: Se obtuvo un boleto, solicitud del consumidor: [dirección del cliente]

Etiquetas: Dubbo Zookeeper Spring Boot java Sistemas Distribuidos

Publicado el 10-7 19:10