拦截器

# Interceptor接口详解

  • io.github.quickmsg.common.interceptor.Interceptor
方法 说明 必传
Object doInterceptor(Invocation invocation) 拦截方法
int order() 拦截排序
  • Invocation 属性说明
参数 说明 必传
method 请求方法
target 被代理类
args 参数数组
  • args 参数数组说明
参数 说明 index 类型
MqttChannel mqtt请求channel 0 MqttChannel
SmqttMessage smqtt消息体 1 SmqttMessage
receiveContext 接收上下文 2 ReceiveContext
  • SmqttMessage 属性说明
参数 说明 类型
message MqttMessage消息 T extends MqttMessage
timestamp 时间戳 Long
isCluster 是否集群消息 Boolean
  • 方法
方法 说明
public Object proceed() 放行拦截器

# 自定义拦截器

  • 实现接口

public class DemoInterceptor implements Interceptor {


    @Override
    public Object intercept(Invocation invocation) {
        try {
            MqttChannel mqttChannel = (MqttChannel) invocation.getArgs()[0];
            SmqttMessage<MqttMessage> smqttMessage = (SmqttMessage<MqttMessage>) invocation.getArgs()[1];
            ReceiveContext<Configuration> mqttReceiveContext = (ReceiveContext<Configuration>) invocation.getArgs()[2];

            // 拦截业务

            return invocation.proceed(); // 放行
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public int sort() {
        return 0;
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  • SPI注入

具体参考java SPI注入

resources/META-INF/services 目录下新建 名为io.github.quickmsg.common.interceptor.Interceptor文件, 将自定义实现类全限定名写入文件中即可完成注入。

拦截器会影响集群消息的广播,也会影响规则引擎,被拦截器过滤的消息是不会触发任何事件

Last Updated: 12/5/2021, 8:33:06 AM