Android使用rabbitmq单例连接

时间:2014-10-27 12:15:55

标签: android connection singleton rabbitmq

我需要一个设计模式来制作一个rabbitmq单例连接,我可以在连接丢失/互联网提供商交换机上重启。 我的问题是由于android主线程策略,连接是在另一个线程(asynctask)上实现的。 我将此连接用于两个使用和推送的服务。

    public class RabbitSingletonConnection {

        public static RabbitSingletonConnection instance;
        private Connection connection;

        private RabbitSingletonConnection() {

        }

        public static RabbitSingletonConnection getInstance() {
            if (instance == null) {
                instance = new RabbitSingletonConnection();
            }
            return instance;
        }

        public void Connect(RabbitMQConnectionCallback callback) {
            if (connection != null && connection.isOpen()) {
                LogUtil.hecsLog("RabbitSingletonConnection", "already connected");
                callback.onConnect(connection);
                return;
            }
            new RabbitConnectAsync(callback).execute("ip","user", "pass");
        }

        public void setConnection(Connection connection) {
            this.connection = connection;
        }

        public Connection getConnection() {
            return connection;
        }
    }

问题是这LogUtil.hecsLog("RabbitSingletonConnection", "already connected");永远不会发生。 我一直在挖掘并发现“使用类加载器声明或ENUM方法的线程安全单例”,但这不包括回调方法。

编辑

RabbitSingletonConnection.getInstance().Connect(new RabbitMQConnectionCallback() {

        @Override
        public void onConnect(Connection result) {
            if (result != null && result.isOpen()){
              RabbitSingletonConnection.getInstance().setConnection(result);
              LogUtil.hecsLog(LOG, "Service has started");
            }


        }
    });

这是一个示例Is it necessary to rebuild RabbitMQ connection each time a message is to be sent但我无法在构造函数中建立连接,因为它需要一个线程来处理TimeoutException

我的目标是在RabbitMQ异步任务连接后启动服务。

我是否需要依赖注入?

1 个答案:

答案 0 :(得分:0)

我想我已经明白了,我正在开始/停止连接增益/丢失服务。我查看了facebook应用程序,服务永远不会停止,因此逻辑答案是重置服务中的工作流程而不是服务的工作流程。