拦截器
quickmsg
# 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
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文件, 将自定义实现类全限定名写入文件中即可完成注入。
拦截器会影响集群消息的广播,也会影响规则引擎,被拦截器过滤的消息是不会触发任何事件