我需要一个设计模式来制作一个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异步任务连接后启动服务。
我是否需要依赖注入?
答案 0 :(得分:0)
我想我已经明白了,我正在开始/停止连接增益/丢失服务。我查看了facebook应用程序,服务永远不会停止,因此逻辑答案是重置服务中的工作流程而不是服务的工作流程。