Я хочу настроить Java-клиент Rabbitmq, отправить сообщение на удаленный сервер Rabbitmq.Однако этот сервер не всегда подключен к сети, поэтому connectionFactory.newConnection () может произойти сбой в первый раз.Таким образом, в рамках весенней загрузки это вызывает ошибку, не инициированную компонентом.
Как настроить клиент Rabbitmq, который может обнаружить, что удаленный сервер снова подключен, затем заново создать соединение и отправить сообщение?Я искал проблему часами, так и не нашел решения.
И нужно ли мне запускать отдельный поток для мониторинга соединения rabbitmq?Как мне буферизовать все сообщения, которые необходимо отправить на сервер, когда он недоступен.
Заранее спасибо.
Мой код:
public Connection getConnection(){
try {
String url = "amqp://log_uploader:HuaweiMsdp2018!@10.193.17.19:5672/%2f";
mFactory = new ConnectionFactory();
mFactory.setAutomaticRecoveryEnabled(true);
mFactory.setHandshakeTimeout(1000000000);
mFactory.setRequestedHeartbeat(600);
//mFactory.useSslProtocol();
mFactory.setUri(url);
mConnection = mFactory.newConnection();
if(mConnection == null)
return null;
return mConnection;
} catch (IOException | NoSuchAlgorithmException | URISyntaxException | TimeoutException | KeyManagementException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
public void setup() throws IOException, TimeoutException, NoSuchAlgorithmException, KeyManagementException, URISyntaxException {
mConnection = getConnection();
// Create a channel from the factory
mChannel = mConnection.createChannel();
mChannel.exchangeDeclare(RABBITMQ_EXCHANGE, "topic", true);
// Create a queue declare
mChannel.queueDeclare(GZ_QUEUE, true, false, false, null);
mChannel.queueDeclare(CSV_QUEUE, true, false, false, null);
mChannel.queueDeclare(PLAINTEXT, true, false, false, null);
return;
}