繁体   English   中英

飞行模式后触发HiveMQ异常,会话因连接关闭而过期

HiveMQ exception fired after airplane mode, Session expired as connection was closed

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我已经在后台线程中成功实现了HiveMQ,但是启用飞行模式后存在一个小问题。 日志显示了原因,但我认为缺少某些内容,看不到丢失的错误处理程序在哪里。

日志:

com.hivemq.client.mqtt.exceptions.MqttSessionExpiredException: Session expired as connection was closed.
System.err  W  io.reactivex.exceptions.OnErrorNotImplementedException: The exception was not handled due to missing onError handler in the subscribe() method call

实现代码:

    client = Mqtt5Client.builder()
            .serverHost(host)
            .serverPort(port)
            .identifier(clientId)
            .addDisconnectedListener(new MqttClientDisconnectedListener() {
                @Override
                public void onDisconnected(MqttClientDisconnectedContext context) {
                    Log.d(TAG, "On disconnected... " + context.getCause());
                }
            })
            .automaticReconnectWithDefaultConfig()
            .buildRx();
    Mqtt5Connect connect = Mqtt5Connect.builder()
            .willPublish()
                .topic(willTopic)
            .applyWillPublish()
            .build();

    Completable connectScenario = client.connect(connect)
            .doOnSuccess(this::connectSuccess)
            .doOnError(this::connectFailed)
            .ignoreElement();

    Single<Mqtt5PublishResult> publishConnect
            = client.publish(Flowable.just(
                    Mqtt5Publish.builder()
                            .topic("d/" + this.clientId + START)
                            .payload(startData.toByteArray())
                            .build())).singleOrError();

            connectScenario
            .andThen(publishConnect)
            .doOnSuccess(this::onConnectSuccess)
            .doOnError(this::disconnectError)
            .subscribe();

当然,这里缺少一些东西,但是问题是我应该在哪里处理断开连接事件。

1 个回复

如果添加doOnError回调,RxJava不会将错误视为已处理。

您可以将错误处理程序添加到subscribe调用:

connectScenario
    .andThen(publishConnect)
    .subscribe(this::onConnectSuccess, this::disconnectError);

相反,在doOnError回调中处理错误后,您也可以忽略该错误:

connectScenario
    .andThen(publishConnect)
    .doOnSuccess(this::onConnectSuccess)
    .doOnError(this::disconnectError)
    .ignoreElement().onErrorComplete()
    .subscribe();

如果要允许临时的网络不可用,则应使用sessionExpiryInterval> 0并自动重新连接。

1 连接关闭后更改sqlserver id会话

我对.net中的sql会话有疑问。 为什么当我关闭具有相同ID会话和pid的sql连接时,为什么? 我尝试了此测试: 每次会话我必须做什么才能关闭? 预先感谢! !! 解决 !! 我在连接字符串“ Pooling = true;”中插入,然后是: ...

2 当会话窗口因不活动而过期时如何触发功能

我正在使用会话窗口来跟踪会话事件并希望在会话窗口到期时清理资源。 当窗口因不活动而过期时,如何在无需编写外部计时器等的情况下获得通知。 例如,在下面的示例中,每次接收到事件时,会话窗口的寿命将延长 10 分钟。 10 分钟不活动后,窗口将过期,因此要在此过期时执行一些代码。 ...

3 一段时间后,MYSQL会话随着休眠而过期

我们正在使用MySQL数据库开发Hibernate。 我们面临与MySQL连接有关的问题。 我们是: 使用tomcat服务器启动我们的Web应用程序。 使用Hibernate在MySQL上做一些数据库工作。 现在一切顺利,现在的问题是,MySQL对于每个不活动的会话 ...

5 连接关闭时过期密钥

我试图使用Redis获得分布式锁定。 谷歌搜索后,我找到了一个解决方案https://github.com/jeffomatic/redis-exp-lock-js/blob/master/js/lib/redis_lua.js 但是此解决方案的问题是:如果应用程序崩溃。 无法在超时之 ...

2013-06-13 05:19:39 1 65   redis
6 RabbitMQ连接关闭异常

process_data_events中的文件“ /usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py”第218行引发异常。ConnectionClosed()pika.exceptions.Con ...

7 nServiceBus Beta连接关闭异常

我试图获取一个nServiceBus示例并在2个PC上运行。 我将构建Distributor示例,并添加几个工作人员,所有工作都在本地运行。 如果我为NServiceBus.Integration或NServiceBus.Production添加命令行参数,则主节点将延迟并抛出.Net. ...

9 第一次查询后连接关闭异常

我已经在GlassFish中使用JAX-WS编写了Web服务。 我从数据源获得数据库连接,并将其传递给jOOQ 。 在请求结束时(基于此问题 ),我关闭与Apache DBUtils的连接: 问题是我只能发送一个请求。 之后,我得到连接关闭异常。 GlassFish中的连接 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM