当前位置: 首页 > 知识库问答 >
问题:

在ActiveMQ Artemis中截获MQTT消息

充普松
2023-03-14

有人能指导我如何在ActiveMQ Artemis Broker上拦截MQTT消息吗?我按照手册中的建议进行了尝试,但是MQTT消息没有被拦截。然而,消息的发布和订阅工作正常。

public class InterceptorExample implements Interceptor {
      @Override
      public boolean intercept(Packet packet, RemotingConnection connection) throws ActiveMQException {
           System.out.println("Packet intercepted");
           return true;
      }
}
protected void addMQTTConnector() throws Exception {        

    .
    .
    .
    List<String> incomingInterceptors = new ArrayList<>();
    incomingInterceptors.add("org.apache.activemq.artemis.core.protocol.mqtt.InterceptorExample");
    server.getConfiguration().setIncomingInterceptorClassNames(incomingInterceptors);

}

broker类的完整代码位于https://codeshare.io/snzsb

共有1个答案

宗政金鹏
2023-03-14

我在MQTT中填充了一个拦截器支持的特性请求。它已经在Artemis 1.4.0中实现并发布。

在Artemis 1.3.0中,只能截获通过核心协议(可能还有MQTT以外的协议)发送的消息

 类似资料:
  • mosquitto.conf将最大飞行消息设置为0,持久性为true。 发布服务器QOS=2 用户QOS=2 保持活力=60 还有其他参数我应该看吗?

  • null 有人帮忙吗? 谢谢,拉胡尔

  • 我想拦截mqtt客户端发送到artemis代理的消息。我遵循的是“拦截器-客户端-MQTT”示例。我的问题是我总是得到一个错误“java.lang.ClassNotFoundException:SimpleMQTTInterceptor”。我的问题是我应该把拦截器类放在哪里,以便代理可以找到它?我应该只放拦截器的类,还是放一个jar文件?

  • null 但是,我发现代理在重新连接时不会向客户机发送任何东西。 这就是我如何测试的:使用上面提到的四个参数将客户机连接到代理。用QOS=1订阅感兴趣的主题断开客户端 使用另一个客户端程序和另一个客户端id,连接到代理将消息发布到由现在脱机的客户端订阅的同一主题。请等待几秒钟,现在使用与以前相同的连接设置重新连接脱机客户端。

  • 消息在持久会话中使用消息过期间隔很长一段时间,订阅服务器可以来来去去、打开和离线,每个主题的消息数量不限。 当我订阅:时,我是否会按照代理接收的顺序从主题中接收消息,这些消息与来自和的消息交织在一起? 关于消息排序的规范规定:

  • 说明 一:mqtt连接:账号:ms_门店编号,密码:sha1(商家apiKey),端口号:1883,订阅主题:ms_门店编号 mqtt下载地址:http://emqtt.com/clients 二:订阅的消息体格式:注意:超时消息无需再进行业务处理,直接废弃该通知 示例: { "version":"1.0", "list":[{ "type": "do-order", //业务类型 "timeou