首页 > 解决方案 > 使用活动方法后Android应用程序与RabbitMQ断开连接

问题描述

我正在尝试将 RabbitMQ 实现到我的 android 应用程序中,但是handleDelivery当我尝试调用外部函数时,方法内部存在连接丢失的问题。

private fun initRabbitmq () {
    factory.setUri("someURI")
    subscribeThread = Thread(object : Runnable {
        override fun run() {
            val connection: Connection = factory.newConnection()
            val channel: Channel = connection.createChannel()
            val consumer: DefaultConsumer
            consumer = object : DefaultConsumer(channel) {
                override fun handleDelivery(consumerTag: String?, envelope: Envelope?, properties: AMQP.BasicProperties?, body: ByteArray?) {
                    super.handleDelivery(consumerTag, envelope, properties, body)
                    val msg = String(body!!, Charsets.UTF_8)
                    Log.e(TAG, "RabbitMQ - $msg")
                    showRabbitMessage(msg)
                }
            }
            channel.basicConsume("defenders_test", true, consumer)
        }
    })
    subscribeThread.start()
}

showRabbitMessage()正在执行的功能连接丢失,但如果我将其删除并查看日志,则消息将显示在控制台中。

知道如何从线程中获取消息吗?提前谢谢!

标签: androidkotlinrabbitmq

解决方案


问题是我必须从线程中传输对象-> 输出,而在 android 中可以通过使用Handle对象和handleMessage()方法来完成。


推荐阅读