You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Moquette MQTT获取客户端IP地址与端口

如何在Moquette 1.5 + SpringBoot中获取MQTT客户端连接的IP和端口

在Moquette 1.5版本中,InterceptConnectMessage确实没有直接暴露客户端的IP和端口,但可以借助其底层依赖的Netty框架来获取这些信息,具体实现如下:

核心实现代码

import io.netty.channel.Channel;
import java.net.InetSocketAddress;

@Override
public void onConnect(InterceptConnectMessage msg) {
    // 从客户端ID对象中获取对应的Netty Channel
    Channel channel = msg.getClientID().channel();
    // 提取远程连接地址
    InetSocketAddress remoteAddr = (InetSocketAddress) channel.remoteAddress();
    
    // 解析IP和端口
    String clientIp = remoteAddr.getAddress().getHostAddress();
    int clientPort = remoteAddr.getPort();
    
    // 这里替换成你自己的收集逻辑
    System.out.printf("新客户端连接 - IP: %s, 端口: %d, ClientID: %s%n", clientIp, clientPort, msg.getClientID());
}

关键说明

  • 依赖Netty的原因:Moquette底层基于Netty处理网络连接,每个MQTT客户端连接对应一个Netty Channel,而Channel的remoteAddress()方法直接提供了远程客户端的地址信息。
  • WebSocket连接兼容:如果你的MQTT服务同时支持WebSocket协议,这个方法同样有效,Netty会统一处理TCP和WebSocket的连接通道。
  • SpringBoot环境适配:只要你按照Moquette的规范将自定义拦截器注册到Broker实例中(比如通过BrokerConfiguration或者自定义配置类),就能正常触发onConnect方法并获取到IP端口信息。

内容的提问来源于stack exchange,提问作者Javier Matute Barragán

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:35:57