Red de conocimiento del abogados - Ley de patentes - Dubbo——invocación de servicio, exposición de servicio, proceso de referencia de servicio

Dubbo——invocación de servicio, exposición de servicio, proceso de referencia de servicio

1. InvokerInvocationHandler jdk proxy dinámico

5. RegistryDirector devuelve Invokers

El enrutador se divide en: enrutamiento de script de script, enrutamiento condicional de condición

6. Obtenga los invocadores que se pueden ejecutar normalmente a través del método de ruta (getNormalInvokers) de MockInvokersSelector

8. Después de regresar a AbstractClusterInvoker, ejecute (FailoverClusterInvoker predeterminado, según la configuración, Failfast Cluster (falla rápida) , Clúster de seguridad contra fallas (seguridad contra fallas), Clúster de recuperación (recuperación automática en caso de falla), Clúster de bifurcación (llame a varios servidores en paralelo, regrese siempre que uno tenga éxito), Clúster de transmisión (transmita llamadas a todos los proveedores, llame uno por uno, si corresponde) uno informa un error, se informará un error)) Método doInvoker

9. FailoverClusterInvoker llama al método select de AbstractClusterInvoker

10. Ejecute el método doSelect

11. Llame al método select de AbstractLoadbalance

12. Llame al método doSelect de la clase correspondiente (como RoundRobinLoadBalance) de acuerdo con la política de equilibrio de carga configurada

13. Devuelva los invocadores. método get()

14. Llame al método invoke de FailoverClusterInvoker

Todos se heredan de la clase abstracta AbstractDirectory

El directorio obtiene el invocador del métodoInvokerMap, que son principalmente operaciones de lectura. Entonces, ¿cuándo se escribe su operación de escritura? Es decir, se opera el método de devolución de llamada, es decir, si el centro de registro cambia, los valores de métodoInvokerMap y urlInvokerMap se actualizan. Filtre los invocadores relacionados de acuerdo con las reglas de enrutamiento configuradas por dubbo-admin. Cuando hacemos clic en Habilitar en las reglas de enrutamiento, se activará el método de notificación de la clase RegistryDirectory.

El método de notificación llama al método de actualizaciónInvoker.

La clase de implementación del método de ruta es ConditionRoute y filtra según las condiciones

1. Llama al método mathThen

2. Llama al método matchCondition

3, llame al juicio isMatch

4. Llame al método isMatchGlobPattern

¿El módulo de clúster es la capa intermedia entre los proveedores de servicios y los consumidores de servicios, protegiendo al proveedor de servicios del servicio? De esta manera, el consumidor del servicio puede concentrarse en manejar los asuntos relacionados con las llamadas remotas. Por ejemplo, enviar una solicitud, recibir datos devueltos por el proveedor del servicio, etc. Esto es lo que hace el clúster Dubbo Cluster.

Utilice cluster para especificar el método de tolerancia a fallas del cluster

De hecho, es la estrategia para lidiar con situaciones de error

Se usa para servicios con estado, por lo que que el cliente siempre intenta Cuando el mismo proveedor inicia una llamada, a menos que el proveedor cuelgue, conectarse a otro y automáticamente abre la conexión retrasada para reducir el número de conexiones largas

Al iniciar, el servicio? el proveedor registra el tiempo de inicio del proceso actual en ZK. Después de que el consumidor del servicio descubre el nodo, calcula el tiempo de inicio del servicio (en relación con el tiempo actual Durante el primer 20% del tiempo de calentamiento predeterminado, el peso del nodo siempre es). fijo en 2, para que el balanceador de carga del cliente solo distribuya muy pocas solicitudes al nodo.

? Dentro del 80% del tiempo después del tiempo de calentamiento, el peso del nodo aumentará linealmente a medida que pase el tiempo, el peso volverá automáticamente al valor predeterminado de; 100; equilibrio de carga El núcleo del servidor es un módulo de algoritmo WLC estándar, que es el algoritmo de conexión menos ponderado.

Si un nodo se cuelga o cae, su peso se ajustará y reducirá rápida y automáticamente; evite el impacto continuo; cuando el nodo se desconecta, el servidor activa el ajuste de peso por adelantado, recarga el peso predeterminado a 1 y lo publica en el centro de registro para que los consumidores perciban rápidamente el evento. Los proveedores de servicios se desconectan sin problemas (tenga en cuenta que el conjunto de lógica solo se ejecuta en el lado del servidor). Agregue la siguiente lógica al controlador correspondiente a ok.htm?down=true. Preste atención para determinar si down es verdadero, porque normalmente es falso. significa verificación de inicio en lugar de apagado

Configuración del consumidor del servidor

El servicio dubbo admite el ajuste dinámico de parámetros, como el ajuste dinámico de pesos, pero el método de implementación de dubbo es especial y no es una idea convencional. .

? La clase ServiceConfig obtiene la referencia de clase real del servicio externo y luego usa la referencia para generar una instancia de AbstractProxyInvoker a través del método getInvoker de la clase ProxyFactory. En este paso, la conversión del servicio específico. al Invoker (javassistProxyFacory, JdkProxyFactory), y luego el proceso de conversión de Invoker a Export

Lanzamiento del servicio: exposición local, exposición remota

¿Por qué hay exposición local y? ¿Exposición remota? ¿Discutir tecnología sin considerar el escenario? Lo que no tiene sentido es que en Dubbo, uno de nuestros servicios puede ser tanto un Proveedor como un Consumidor, por lo que existe una situación en la que llama a su propio servicio si se accede a él a través de la red. Naturalmente, estará lejos, por lo que tiene servicios locales expuestos. Desde aquí sabremos la diferencia entre los dos

1. Inicio de primavera, analiza el archivo de configuración. 2. Cree un analizador de etiquetas dubbo

3, analice etiquetas dubbo

4. Análisis de ServiceBean

5. Se completa la creación del contenedor, lo que activa ContextRefrestEvent

6. Exportar servicio expuesto

7 , duExportUrls

8. doExportUrlsFor1Protocol

9. getInvoker

10. protocol.export

11. Abra el servidor openServer() como nettyServer

12. Registre el servicio en el centro de registro RegisterProvider

El filtro inicializa el interceptor antes de que se ejecute el servicio. expuestos Cuando todos los interceptores estén cargados, se filtrarán los datos efectivos del proveedor del destacamento.

Sí. La información de Zookeeper se almacenará en caché localmente como un archivo de caché y se convertirá en objetos de propiedades para facilitar su uso. Establezca un grupo de subprocesos, detecte y conéctese periódicamente al centro de registro y vuelva a conectarse si falla.

Registrar un servicio en zk es en realidad crear un nodo temporal en zk. Cuando el nodo se desconecta o deja de funcionar, el nodo temporal se eliminará, eliminando así el servicio de la lista disponible.

Nodo persistente

Nodo temporal

1. Realizar suscripción zk al exportar

2. Establecer la dirección de la devolución de llamada de escucha y la llamada volver a la notificación de FailbackRegistry

3. Crear un nodo persistente

4. Configurar el monitoreo del nodo

5. Actualizar la información del nuevo servicio, el inicio del servicio y el nodo actualizar Las devoluciones de llamada se llamarán aquí

6. Actualice el archivo de caché

7. Compare la información antigua y nueva para ver si hay algún cambio y vuelva a exponer el servicio si los hay. ¿Hay alguno

Alta concurrencia y grandes negocios En caso de mucho tráfico, los servicios perimetrales se bloquean temporalmente

MockClusterInvoker

SPI significa Interfaz de proveedor de servicios y es un? Mecanismo de descubrimiento de servicios. La esencia de SPI es configurar el nombre completo de la clase de implementación de la interfaz en un archivo, y el cargador de servicios lee el archivo de configuración y carga la clase de implementación. Esto le permite reemplazar dinámicamente clases de implementación para interfaces en tiempo de ejecución. Gracias a esta característica, podemos proporcionar fácilmente funciones extendidas para nuestros programas a través del mecanismo SPI. El mecanismo SPI también se utiliza en marcos de terceros. Por ejemplo, Dubbo carga todos los componentes a través del mecanismo SPI. Sin embargo, Dubbo no utiliza el mecanismo SPI nativo de Java, sino que lo mejora para satisfacer mejor las necesidades. En Dubbo, SPI es un módulo muy importante. Basado en SPI, podemos expandir Dubbo fácilmente. Si desea conocer el código fuente de Dubbo, debe comprender el mecanismo SPI. A continuación, primero comprendamos el uso de Java SPI y Dubbo SPI, y luego analicemos el código fuente de Dubbo SPI.