RPC dubbo aprendizaje marco de portal y el medio ambiente para construir (primavera de arranque + Kotlin)

Antes de aprendizaje, la base de conocimientos para asegurar que existen los siguientes:

  • Programación de la cadena de Java
  • la transmisión de datos socket
  • flujo IO

RPC Introducción y Ejecución

RPC es una forma rápida llamada a procedimiento remoto, es decir, las llamadas a procedimientos remotos.

escenario de aplicación RPC es mayor desarrollo distribuido, el desarrollo de lo que se distribuye?

Al principio yo también quería explicar a mí mismo, pero ya en línea Gangster explicar muy claramente, no es incompetencia, recomiendo la lectura de la siguiente recomienda varios para continuar por

Al principio, el servicio y las llamadas están en la misma máquina, llamada llamada de procedimiento local

Más tarde, debido al crecimiento del volumen del cliente, el servidor no puede cumplir con los requisitos, entonces la llamada se separa y servicios, están desplegados en una máquina diferente, es responsable de llamar al método de servicio se llama cliente , es responsable de proporcionar un método de servicio llamada máquinas de servicio

Figura principio podría intensificar un poco más, pero recuerda que los datos del cliente se transfiere a través del zócalo u otro acuerdo a los servidores, por lo que las máquinas de servicio para el procesamiento, por lo que en la misma forma en que el protocolo para pasar de nuevo a los datos

Cómo implementar un simple RPC artículo, hermano mayor ha puesto en marcha un marco RPC simple, y el marco para este RPC, y formuló una serie de puntos que puede ser optimizado:

1. La falta de versatilidad

Puedo escribir dando interfaz de la calculadora a un CalculatorRemoteImpl, para lograr la calculadora de llamada remota, la próxima vez si hay una necesidad de llamadas de larga distancia en otra interfaz, no está usted también tiene que escribir la clase de implementación llamadas de larga distancia que corresponde? Este es sin duda un inconveniente.

2, Spring Integración

En la realización de un objeto proxy universal, el siguiente paso será el de considerar la integración de Primavera características de la COI, para crear un objeto proxy a través de la primavera, será necesario para inicializar el grano de primavera un cierto alcance.

3, conector de servicios de larga o corta

Es abrir una conexión de socket se establece que no siempre puede ser invocada cuando la interfaz RPC? Cuando no es posible mantener una serie de servicios de larga, entonces hay muchas petición RPC, la solicitud en la cola de tareas, y luego ejecutado por un grupo de subprocesos para gastar? Es sólo una idea, puede hacer referencia a la forma en que se alcanza la Dubbo seguimiento.

4, la agrupación de hebras del servidor

Ahora estamos del lado del servidor, un único subproceso, por lo que cada vez que se procesa una solicitud con el fin de aceptar una conexión con otro conector, por lo que el rendimiento es ciertamente malo, no es por un grupo de subprocesos para lograr el procesamiento simultáneo de múltiples solicitud RPC? También sólo un pensamiento.

5, el registro de servicios

Como se mencionó anteriormente, para llamar al servicio, primero es necesario un registro de servicios, que son lo que la otra instancia de servicio decirle. registro de servicios dubbo es configurable, el funcionario recomendó Zookeeper. Si está utilizando Zookeeper, entonces, cómo registrar la instancia anterior, sino también cómo obtener una instancia, se trata de lograr.

6, el equilibrio de carga

Cómo elegir entre varias instancias donde uno y hacer llamadas, que utilizan el equilibrio de carga. La política de equilibrio de carga es sin duda más de uno, cómo la política se puede hacer configurable? Sino también la forma de aplicar estas estrategias? Lo mismo puede referirse a Dubbo, Dubbo - Equilibrio de carga

7. Resultado caché

Del lado del servidor realmente debe ir a cada consulta de llamadas de todos modos consulta interfaz? Es no pensar en el almacenamiento en caché de apoyo?

8, el control multi-versión

interfaces de servidor cambiado, la interfaz de edad cómo hacerlo?

9, una llamada asincrónica

Después de la terminación de la interfaz de llamada del cliente, no quieren esperar a que el servidor de retorno, quiero hacer algunas otras cosas, no se puede apoyar?

10, el tiempo de inactividad elegante

Para apagar el servidor, la solicitud no se procesa, ¿cómo?

PD: Cuando se utiliza RPC, tenga en cuenta el problema de red, es necesario un mecanismo de reintento

A partir de estas preguntas, entonces es que ha habido algunos marcos de RPC pendientes, como dubbo, primavera de nubes, etc.

Perfil dubbo

Dubbo es una RPC basada en Java de alto rendimiento (Remote Procedure Call) Distribuido Framework Service (SOA), que proporciona un alto rendimiento y la transparencia de los programas RPC servicio remoto de llamadas, servicios y programa de gobierno de SOA, su uso interno de Alibaba de código abierto Netty, Zookeeper, asegura un alto rendimiento y alta disponibilidad.

estructura dubbo figura:

nodo Descripción del papel
Proveedor Exponer servicio de proveedor de servicios
Consumidor Llamar a los servicios de consumo de servicios a distancia
Registro el registro del servicio y los registros de descubrimiento
Monitor El número de las estadísticas de llamadas seguimiento de los servicios centrales y duración de la llamada
Envase ejecutar los servicios de contenedores

Entre ellos, los registros Registryy los centros de vigilancia Monitorson opcionales, por lo que a continuación se brevemente logrado dubbo (punto a la transmisión punto de datos)

<dependency>
    <groupId>com.starsone</groupId>
    <artifactId>dubbo-api</artifactId>
    <version>0.0.1</version>
</dependency>

implementación simple dubbo

Descripción del Proyecto: El
proyecto se basa en el arranque de primavera, que se divide en tres partes api, consumeryprovider

  • API se utiliza principalmente para declarar algunas interfaces de servicios (proyecto maven)
  • proveedor es la realización de la interfaz de servicio (proyecto de arranque de primavera a través del proyecto API depende maven)
  • consumidor es la interfaz de servicio (proyecto de muelle de arranque a través de la API depende maven) proporciona el proveedor remoto de llamadas,

El cliente es esencialmente equivalente para el consumidor y el proveedor es equivalente al cliente

1. Crear un nuevo proyecto

Uso IDEA, crear un proyecto en blanco, y luego crear un nuevo módulo

Después de IDEA se abrirá una ventana de un nuevo módulo

Y a continuación, haga clic en Nuevo api, proveedor, tres módulos cousmer

api elija Maven proyecto, después de llenado en la información relevante directamente al nuevo nombre de paquete puede (no se necesita para elegir una estructura maven específica), mientras que los otros dos son proyecto de arranque primavera, se puede elegir la primavera initializr nueva, igualmente, no marque la otra la dependencia, de relleno en la información relevante nombre del paquete a Nueva

interfaz de servicio de declaración de proyecto 2.api

En el proyecto de API, creamos una nueva interfaz CalculatorService, que define un método add

public interface CalculatorService {
    int add(int a,int b);
}

proyecto API dependientes 3. Configurar

Originalmente, después de que el proveedor y las necesidades de los consumidores a proyectos de referencia son dubbo-primavera-arranque-motor de arranque esta dependencia, dubbo-primavera-arranque-motor de arranque depende ya incluido dubbo dependiente, lo que puede confiar dubbo de la necesidad de escribir

Desde entonces nuestros artículos proveedor y el consumidor son api necesidad de hacer referencia a este proyecto, para que podamos poner el proveedor y el consumidor sea necesario confiar dubbo-spring-boot-starterañaden a esta API proyecto

Después de que los elementos de proveedor y el consumidor que depende del proyecto de API, también depende del éxito de ladubbo-spring-boot-starter

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.5</version>
</dependency>

4.provider y proyectos de consumo referencias dependencias del proyecto api

Porque antes de API proyecto estamos creando un proyecto Maven, por lo que añadir una dependencia es muy simple, la adición de una dependencia de proveedor y el consumidor a su pom.xml

5.provider implementan la API de interfaz de servicio

Creamos una nueva clase en el proveedor de proyecto CalculatorServiceImpl, para implementar CalculatorServicela interfaz

@Service(interfaceName = "calculatorService")
class CalculatorServiceImpl:CalculatorService {
    override fun add(a: Int, b: Int): Int {
        val result = a+b
        println("$a+$b=$result")
        return result
    }
}

Tenga en cuenta que este comentario es dubbo del paquete de servicio dentro de las notas, en lugar de la primavera de servicio , definir el nombre de la interfaz interfaceNamepara el calculatorServicecontenedor de encontrar, conveniente después

6. Proyecto proveedor de Configurar

Tenemos que modificar el archivo de configuración de inicio de la primavera, y aquí usamos la forma yml ser configurado, la lectura más cómoda

spring:
  application:
    name: dubbo-provider-application
dubbo:
  scan:
    #扫描指定包是否包含有dubbo中Service注解的类
    base-packages: com.starsone.provider.service
  protocol:
    name: dubbo #协议,默认为dubbo(其他协议webserovice、Thrift、Hessain、http)
    port: 12345 #端口,默认为20880
  registry:
    address: N/A #不需要注册中心

PD: Si no se desarrollan como el escaneo contiene anotaciones de servicio en el archivo de configuración, se puede añadir proyecto proveedor de clase de aplicación a su vez dubbo exploración automática de notas@EnableDubbo

proveedor de diagrama de estructura del proyecto:

7. proveedor Run

Puesto que no hemos introducido el registro, por lo que tenemos que correr el proveedor, la dirección IP

Después de artículos de consumo, para hacer Springr recipiente de acuerdo con la dirección IP y número de puerto para encontrar la instancia correspondiente y carga automática

El registro de salida, se puede ver la dirección IP

8.consumer obtener objetos de servicio

@Component
class MyRunner:ApplicationRunner {
    @Reference(url ="dubbo://192.168.52.1:12345",interfaceName = "calculatorService" )
    private lateinit var calculatorService: CalculatorService

    override fun run(args: ApplicationArguments?) {
        println(calculatorService.add(5,14))
    }
}

En este caso, debido a que es fácil de tener en cuenta, sin usar una red dependiente, por lo tanto, utilizar esta interfaz para probar la ApplicationRunner, primavera cargado de contenedores para completar esta interfaz automáticamente devolución de llamada

Referencia es dubbo notas en los comentarios, después de la ejecución del proyecto del consumidor, el consumidor será pasado dubbo datos de acuerdo con esta url y otra información, llame al proveedor de servicio remoto y, a continuación, el proveedor recibe y procesa los datos y devuelve datos para el consumidor, no es con la sensación de RPC?

9. Configurar y prueba de consumidores

Configurado, sólo el nombre de la configuración de la aplicación

Después de eso, se corre la aplicación del consumidor, se puede ver los resultados

Del mismo modo, el proveedor, y también es imprimir los parámetros pasados ​​sobre artículos de consumo

La introducción de registro

Delante de realización, no existe un registro, es una manera de conectar directamente, pero, de hecho, el desarrollo distribuido, con múltiples máquinas de servicio

El cliente debe solicitar al registro, la consulta del registro del servicio actual está inactivo, y de acuerdo con una estrategia, seleccione un servicio, establezca su posterior dirección IP al cliente, el cliente mediante la dirección IP y el máquina de servicio conectado para funcionamiento RPC

marco dubbo recomienda ZooKeeper como un centro de registro

ZooKeeper es una, de código abierto del servicio de coordinación distribuida para aplicaciones distribuidas, es una implementación de código abierto del rechoncha de Google, es un componente clave de Hadoop y hbase. Es para proporcionar un servicio consistente para aplicaciones distribuidas, proporciona características incluyen: mantenimiento de la configuración, el servicio de nombres de dominio, la sincronización distribuida, los servicios de grupos.

1. Descarga el cuidador del zoológico

http://mirror.bit.edu.cn/apache/zookeeper/

Tenga en cuenta que la descarga aquí es consistente con la versión de la mejor versión del proyecto se basa

2. empleado del zoológico dependiente de las importaciones

Tenemos que modificar depender proyecto API, por lo que depende del operador y el consumidor es capaz de modificar los dos proyectos

<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.14</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
        <exclusion>
            <groupId>io.netty</groupId>
            <artifactId>netty</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- Zookeeper客户端 -->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.2.0</version>
</dependency>

3. Configurar el proveedor de registro y de consumo de

proveedor:

consumidor:

4. Cancelar URL especificada del consumidor

Ya que estamos usando el registro, no hay necesidad de especificar la dirección URL, ésta elimina en Referencia Notas

5. Ejecutar empleado del zoológico

Extraer el archivo descargado empleado del zoológico, en el directorio conf, el zoo_sample.cfgarchivo ha cambiadozoo.cfg

Vaya al directorio bin, haga clic en el zkserver.cmdarchivo, ejecute el cuidador del zoológico

6. Ejecutar el proveedor y el consumidor

En primer proveedor de carrera, después de ejecutar el consumidor, se puede ver los resultados

En este artículo también tirar de unos pocos días, más de una docena referencia al artículo, llegar paso a prueba de paso se ha realizado correctamente, y algunos puntos y el conocimiento no demasiado profundo, al igual que la consola dubbo, tales como la forma de configurar el centro de monitoreo, cuando este último estudio adicional suplemento lo

referencia

Supongo que te gusta

Origin www.cnblogs.com/stars-one/p/12534295.html
Recomendado
Clasificación