RabbitMQ: ConnectionFactory выдает «Отказ в соединении», но я могу написать все в одном .to () - PullRequest
0 голосов
/ 26 июня 2018

Новый пользователь Camel здесь.

У меня есть приложение Spring Boot / Camel, и я успешно получил маршрут, который опрашивает конечную точку REST, разбивает массив JSON на пользовательские POJOS, превращает каждый из них в один из наших протобуфови затем записывает протобуф в наш RabbitMQ.

Пока все хорошо.

Однако мне потребовалось немало усилий для отладки и выполнения этого последнего шага (запись вавтобус).По сути, я никогда не мог установить соединение с шиной, используя ConnectionFactory, и вместо этого, в конце концов, выяснил, как это сделать, поместив все соединение / запись на шину, используя просто оператор .to () в DSL..

Так что мне действительно очень интересно узнать, что я делал неправильно с ConnectionFactory.Любая помощь будет высоко ценится!

Хорошо, вот что сработало:

(добавлены новые строки для ясности)

.to(“rabbitmq://hostname:5672/exchange?
    username=user&
    password=password&
    vhost=sandbox&
    exchangeType=topic&
    routingKey=routingkey&
    durable=false&
    autoDelete=false”);

На самом деле, у меня есть быстрый вопрос здесь: Расточительно ли выполнять вышеперечисленное в том смысле, что соединение не объединяется и оно устанавливает соединение с каждой записью?

Хорошо, и это то, что не сработало и продолжало давать мне java.net.ConnectException: Connection refusedошибка:

RabbitMQEndpoint endpoint = new RabbitMQEndpoint();

endpoint.setHostname(“hostname”);
endpoint.setVhost(“sandbox”);
endpoint.setUsername(“user”);
endpoint.setPassword(“password”);
endpoint.setPortNumber(5672);
endpoint.setRoutingKey(“routingkey”);
endpoint.setExchangeName(“exchange”);

endpoint.setExchangeType(“topic”);
endpoint.setDurable(false);
endpoint.setAutoDelete(false);

Connection connectionFactory = new RabbitMQConnectionFactorySupport().createFactoryFor(endpoint);

Так чего мне не хватает ??

Для чего стоит, если вышеприведенное соединение сработало, я собирался написать шину с помощью следующего оператора .to (),Это выглядит правильно?В частности, могу ли я указать что-нибудь после «rabbitmq:» вместо «bogusbus»?

.to(“rabbitmq:bogusbus?exchangeType=topic&exchangeName=exchange&routingKey=routingkey”);

Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 27 июня 2018

В соответствии с документацией вы можете настроить com.rabbitmq.client.ConnectionFactory, а затем ссылаться на него следующим образом:

.to("rabbitmq:exchangeName?connectionFactory=#rabbitConnectionFactory&...")

Где rabbitConnectionFactory - имя компонента соединенияэкземпляр фабрики в вашем реестре компонентов (обратите внимание на необходимые #).

Позаботьтесь о том, чтобы все параметры соединения в URI игнорировались, если вы ссылаетесь на connectionFactory!

...