El filtro Dubbo (interceptor) a utilizar --dubbo.rpc.Filter

Perfil com.alibaba.dubbo.rpc.Filter

primero Hablemos de la "Filtro", como su nombre indica filtro en nuestro trabajo diario es un oponente ferviente.
En artículos anteriores he presentado similar en primavera HandlerInterceptor a su uso .
com.alibaba.dubbo.rpc.Filter cambió el chaleco, sigue siendo porteros secos trabajo (filtro), pero Ali se puso a trabajar en dubbo se derivan de los guardianes de la seguridad, por lo que las cosas de bajo perfil que le conozcamos simios no son muchos, y mucho menos javax.servlet.Filter HandlerInterceptor reputación, hijos y nietos en todas partes, jugando mahjong también son un poco más para comprar un caballo en el lateral.

tirón disparate terminó, entró, tomé mi lado alarde impresión negocio de sistemas para introducir el número de serie. Negocios problema de verificación de antecedentes es encontrar el registro a menudo viene a presumir sistema de consulta a otro sistema, pero ¿cómo puedo encontrar rápidamente el registro correspondiente en el registro de enormes cantidades de tiempo en el caso de cribado es muy ineficiente y estúpida. Así que cada solicitud HTTP es asignado un UUID único, UUID en el proceso de realización de llamadas de interfaz Dubbo en el pasado para garantizar la realización del registro para localizar rápidamente el mismo UUID.

1. Filtro Definiciones

  • Com.alibaba.dubbo.rpc.Filter implementar la interfaz.
  • Adición de Activate, que toma nota de los siguientes significados:
    • grupo: el grupo propietario como del consumidor, proveedor de servicios de Han
    • orden: Filtro de orden de ejecución de una pluralidad de (anterior más pequeño)
package com.test.trace.remote.filter;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;

import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.extension.Activate;
import com.alibaba.dubbo.rpc.Filter;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcContext;
import com.alibaba.dubbo.rpc.RpcException;
import com.test.trace.support.AbstractMyThreadContext;
import com.test.trace.support.AbstractUUIDShort;


@Activate(group = {Constants.CONSUMER, Constants.PROVIDER}, order = -30000)
public class RemoteTraceIdFilter implements Filter {
    protected final Logger log = LoggerFactory.getLogger(this.getClass());

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
       //判断是消费者  还是 服务提供者
        if (RpcContext.getContext().isConsumerSide()) {
            //消费者 将trace_id(业务流水号) set至上下文中
            RpcContext.getContext().setAttachment(AbstractMyThreadContext.TRACE_ID,
                    AbstractMyThreadContext.getTraceId());
        } else {
            //取出业务流水号
            String traceId =
                    RpcContext.getContext().getAttachment(AbstractMyThreadContext.TRACE_ID);
            if (traceId == null) {
                traceId = AbstractUUIDShort.generate();
            }
            //流水号set至线程局部变量
            AbstractMyThreadContext.setTraceId(traceId);
            //slf4j 中设置了日志打印格式用作日志链路追踪
            MDC.put(AbstractMyThreadContext.MDC_TRACE_ID, traceId);
        }
        try {
            return invoker.invoke(invocation);
        } finally {
            if (RpcContext.getContext().isProviderSide()) {
                MDC.remove(AbstractMyThreadContext.MDC_TRACE_ID);
                AbstractMyThreadContext.removeTraceId();
            }
        }
    }
}

2, tener un nombre

  • Nuevo directorio de recursos en la carpeta META-INF, y luego crear subcarpetas DUBBO, la última nueva com.alibaba.dubbo.rpc.Filter archivo. ( Golpe pizarra llamar la atención tirón! No cometa un error aquí )
  • De un nombre para el filtro y conecte el camino clase de implementación del filtro correspondiente, como se muestra a continuación se hizo conocido como traceid (nombre de todos los presentes un nombre basado en su propio negocio)
    Nombre de archivo del directorio

3, a los porteros

  • Para localizar elementos específicos en el archivo de configuración con la siguiente configuración dubbo
  • filtro es, tomamos la segunda etapa de un alias de archivo
<dubbo:provider filter="traceId" />
<dubbo:consumer filter="traceId" />

Este sencillo método aplicable a la dubbo todos filtro debe entender que puede utilizar para empezar.
Si conjunto necesario de código de seguimiento de enlace de registro que puede esperar a que el resto de mi próximo artículo publicado.

4, la historia paralela

Ahora estamos utilizando Maven Hay un pequeño hoyo a destacar es que el siguiente avance. Si todavía no prestar atención Puede reportar: No existe el xxxFilter extensión de filtro / com.alibaba.dubbo.rpc.Filter error
contenido del error no se encuentra xxxFilter, puede haber especificado su Pom tipos de archivos necesitan ser envasados bajo los recursos, modificar por ciento. * final muy bien. Código es el siguiente

<resource>
	<directory>${basedir}/src/main/resources</directory>
	<filtering>true</filtering>
	<includes>
		<include>**/*.*</include>
	</includes>
</resource>
Publicado 18 artículos originales · ganado elogios 45 · vistas 110 000 +

Supongo que te gusta

Origin blog.csdn.net/zhibo_lv/article/details/104796122
Recomendado
Clasificación