org.eclipse.paho.client mqtt客户端连接超时

客户端订阅mqtt 的时候 显示超时。第二次重起服务可能就好了,但是可能会丢消息。

报错如下

org.eclipse.paho.client.mqttv3.MqttException: 等待来自服务器的响应时超时
        at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:31) ~[org.eclipse.paho.client.mqttv3-1.2.1.jar!/:na]
        at org.eclipse.paho.client.mqttv3.internal.ClientState.checkForActivity(ClientState.java:741) ~[org.eclipse.paho.client.mqttv3-1.2.1.jar!/:na]
        at org.eclipse.paho.client.mqttv3.internal.ClientComms.checkForActivity(ClientComms.java:816) ~[org.eclipse.paho.client.mqttv3-1.2.1.jar!/:na]
        at org.eclipse.paho.client.mqttv3.internal.ClientComms.checkForActivity(ClientComms.java:802) ~[org.eclipse.paho.client.mqttv3-1.2.1.jar!/:na]
        at org.eclipse.paho.client.mqttv3.TimerPingSender$PingTask.run(TimerPingSender.java:79) ~[org.eclipse.paho.client.mqttv3-1.2.1.jar!/:na]
        at java.util.TimerThread.mainLoop(Timer.java:555) ~[na:1.8.0_221]
        at java.util.TimerThread.run(Timer.java:505) ~[na:1.8.0_221]

  解决办法:

log.info("try connect to mqtt");//调用connect 后,一定要再调用 一下token.waitForCompletion();这样应该就可以了。原因不明。
IMqttToken token = client.connect(connOpts);token.waitForCompletion();log.info("connect mqtt success");client.subscribe(topic, 1, new MqttMsgListener());

原文地址:https://www.cnblogs.com/zhangyy3/p/11448130.html

时间: 2024-11-02 07:36:08

org.eclipse.paho.client mqtt客户端连接超时的相关文章

API for org.eclipse.paho.client.mqttv3

org.eclipse.paho.client.mqttv3的包结构如下: org.eclipse.paho.client.mqttv3 Interfaces IMqttActionListener IMqttAsyncClient IMqttClient IMqttDeliveryToken MqttMessageListener IMqttToken MqttCallback MqttCallbackExtended MqttClientPersistence MqttPersistable

MQTT协议实现Eclipse Paho学习总结二

一.概述 前一篇博客(MQTT协议实现Eclipse Paho学习总结一) 写了一些MQTT协议相关的一些概述和其实现Eclipse Paho的报文类别,同时对心跳包进行了分析.这篇文章,在不涉及MQTT逻辑实现的基础之上分析一下Eclipse Paho中Socket通信的实现,这里我们主要阐述其采用Java同步技术将同步的Socket通信异步化的过程. 二.上菜 先看一下在org.eclipse.paho.client.mqttv3.internal有两个类,CommsSender,Comms

MQTT协议实现Eclipse Paho学习总结

转载自:http://xiaoxinzhou.blog.163.com/blog/static/20704538620145411306821/ 一.概述 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放.简单.轻量.易于实现.这些特点使它适用于受限环境.例如,但不仅限于此: 网络代价昂贵,带宽低.不可靠. 在嵌入设备中运行,处理器和内存资源有限. 该协议的特点有: 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合. 对负载内容屏蔽的消息传输. 使

[3] MQTT,mosquitto,Eclipse Paho---如何使用 Eclipse Paho MQTT工具来发送订阅MQTT消息?

在上两节,笔者主要介绍了 MQTT,mosquitto,Eclipse Paho的基本概念已经如何安装mosquitto. 在这个章节我们就来看看如何用 Eclipse Paho MQTT工具来发送接收MQTT消息.Eclipse Paho MQTT工具是一个基于Java的Eclipse桌面客户端程序,其底层的和MQTT服务器进行的交互的java类库就是Eclipse Paho java库.假设我们在本机(127.0.0.1)已经启动了一个mosquitto MQTT服务器,其端口为1883.如

Paho -物联网 MQTT C Cient的实现和详解

概述   在文章Paho - MQTT C Cient的实现中,我介绍了如何使用Paho开源项目创建MQTTClient_pulish客户端.但只是简单的介绍了使用方法,而且客户端的结果与之前介绍的并不吻合,今天我就结合新的例子,给大家讲解一下Paho使用MQTT客户端的主要过程.  如同前面介绍的,MQTT客户端分为同步客户端和异步客户端.今天主要讲解的是同步客户端,结构还是如同步客户端中介绍的:   1.创建一个客户端对象:  2.设置连接MQTT服务器的选项:  3.如果多线程(异步模式)

Ruby操作MongoDB(进阶)-创建数据库客户端连接

在Ruby的MongoDB2.4.3驱动版本中,通过创建一个Mongo::Client对象来构建一个Ruby的数据库连接.Mongo::Client构造器提供两种构造方式:一是通过提供主机列表和一些可选参数,另外还有通过一个连接URI.创建好的数据库连接默认连接到admin数据库. 1.使用Mongo::Client创建数据库客户端连接 1.1. 单服务器模式创建数据库连接 在单服务器模式下创建数据库连接,只需提供一个主机连接参数.另外,还可以通过消除自动发现步骤强制将集群拓扑转换为单机模式.可

Redis c/c++, java 客户端连接

Redis 介绍 redis这个想必大家都了解,关于redis的安装参考这里,redis使用文档参见这里. Redis C客户端的使用方法 Redis的c客户端 Hiredis使用比较广泛,下面主要介绍下它. 1,Hiredis的安装,配置 Hiredis客户端 在redis解压后的deps/hiredis下有相应的文件.如果你的安装包没有相应的文件可以到这里下载. cd deps/hiredis (下载hiredis的话 自行解压进入 解压后的目录). make 最后 把相应的文件加入到 系统

Redis基础知识之————如何处理客户端连接

redis 连接建立 Redis Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作: 首先,客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型. 然后为这个socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法 然后创建一个 readable 的文件事件用于监听这个客户端 socket 的数据发送 当客户端连接被初始化后,

Redis如何处理客户端连接

本文主要介绍了 Redis 处理客户端连接的一些内部实现机制,包括连接处理.超时.缓冲区等一系列内容. 注:本文所述内容基于 Redis2.6 及以上版本. 连接的建立 Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作: 首先,客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型. 然后为这个socket 设置 TCP_NODELAY 属性,禁