RabbitMQ:ConnectionFactory 给出 "Connection refused" 但我可以将所有内容写在一个 .to() 中

RabbitMQ: ConnectionFactory gives "Connection refused" yet I can write all in one .to()

这里是 Camel 新用户。

我有一个 Spring Boot / Camel 应用程序,并成功地获得了一个工作路由,该路由轮询 REST 端点,将 JSON 数组拆分为自定义 POJOS,将每个转换为我们的 Protobufs 之一,然后将 protobuf 写入我们的 RabbitMQ。

到目前为止一切顺利。

但是,我花了很多时间来调试并使最后一步工作(写到总线)。基本上,我永远无法使用 ConnectionFactory 建立与总线的连接,而是最终想出了如何通过使用 just 将整个 connection/writing 放到总线上来做到这一点。 () 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”);

非常感谢您的帮助!

根据the documentation你可以配置一个com.rabbitmq.client.ConnectionFactory然后在你的路由中引用如下:

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

其中 rabbitConnectionFactory 是您的 bean 注册表中连接工厂实例的 bean 名称(注意需要的 #)。

Take care that all connection options on the URI are ignored if you reference a connectionFactory!