如何使用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
相关产品推荐
相关产品推荐

