Как настроить клиент rabbitmq для автоматического обнаружения удаленного сервера и создания соединения? - PullRequest
0 голосов
/ 29 сентября 2018

Я хочу настроить 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...