Мне нужен проект, чтобы сделать одностороннее соединение rabbitmq, которое я могу перезапустить при переключении потери/интернет-провайдера. Моя проблема заключается в том, что соединение реализуется в другом потоке (асинхронной) из-за политики основного потока android. Я использую это соединение для двух сервисов, которые потребляют и толкают.Android, использующий односвязное соединение rabbitmq
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");
никогда не возникает. Я копал и обнаружил что-то «Thread safe singleton с использованием объявления classloader или подхода ENUM», но это не включает метод обратного вызова.
EDIT
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
.
Моя цель - начать сервис после соединения задачи async rabbitMQ.
Нужна ли мне инъекция зависимостей?
Метод RabbitConnectAsync вызывает setConnection? Потому что, если это не так, переменная соединения всегда будет равна нулю. –
Да, обе службы делают. Проблема в том, что все мое приложение основано на потоках. –
Вторая услуга запускается при первом подключении, поэтому она возвращает нулевое соединение. –