当前位置: 首页 > 知识库问答 >
问题:

Talend ESB

岳朝
2023-03-14

我目前正在尝试用Talend open studio for ESB为RabbitMQ队列构建一个消费者。在阅读了我能找到的关于这个话题的每一个帖子后,我有两个不同的版本,但没有一个真正有效。

版本 1:

我的路线:

cMessagingEndpoint Route

cMessagingEndpoint1 URI:

“rabbitmq://host:port/exchange?username=xxxxx

我也尝试添加持久=true和no_declare=true到这个URI,但是我收到一个未知参数错误。所以我再次删除了这两个。

消息endpointURI

cMessagingEndpoint Camel组件

控制台输出:这似乎是旧语法,驱动程序错误导致连接关闭。

控制台输出

[WARN ] 09:29:07 org.apache.camel.component.rabbitmq.RabbitMQComponent- The old syntax rabbitmq://hostname:port/exchangeName is deprecated. You should configure the hostname on the component or ConnectionFactory
[WARN ] 09:29:08 com.rabbitmq.client.impl.ForgivingExceptionHandler- An unexpected connection driver error occured (Exception message: Connection reset)
[WARN ] 09:29:08 org.apache.camel.component.rabbitmq.RabbitConsumer- Unable to open channel for RabbitMQConsumer. Continuing and will try again

我假设驱动程序错误可能是由于我没有发送“持久:真实,no_declare:true”引起的,但我不确定在哪里添加这2个选项。

版本 2:

二号干线

我的连接工厂

cMQConnectionFactory设置

定义的实际队列。

cAMQ设置

包括durable和no_declare。这些必须被定义,否则我永远无法连接到RabbitMQ服务器

cAMQ高级设置

但我再次收到未知参数错误。

org.apache.camel.FailedToCreateRouteException: Failed to create route test_receiveMQMessage_cAMQP_1: Route(test_receiveMQMessage_cAMQP_1)[[From[cMQConnectionFact... because of Failed to resolve endpoint: cMQConnectionFactory1://queue:arcplace?durable=true&no_declare=true due to: Failed to resolve endpoint: cMQConnectionFactory1://queue:arcplace?durable=true&no_declare=true due to: There are 2 parameters that couldn't be set on the endpoint. Check the uri if the parameters are spelt correctly and that they are properties of the endpoint. Unknown parameters=[{durable=true, no_declare=true}]

有人知道如何解决此问题并将我的侦听器连接到RabbitMQ队列吗?

谢谢

编辑:

为了测试并确保连接是可能的,我创建了一个ruby脚本来将消息发布到交换机并使用发送到队列的消息。这没有任何问题。

我仍在努力使这条路线/工作行得通。

编辑2:

我检查了RabbitMQ代理的设置。这是一个基本安装,支持TLS上的AMQP 0.9.1。不支持AMQP 1.0或MQTT。

共有1个答案

庾远航
2023-03-14

要继续使用AMQP 0.9,您必须将cMessagingEndpoint与Rabbitmq url(带有连接工厂bean的新语法)一起使用:

< code>rabbitmq:myexchange?queue=myqueue

您必须注册一个连接工厂bean,骆驼将使用cBeanPost自动检测到它。我使用全局bean实例来传递上下文变量,如主机、用户等。cBeanPost以简单模式配置,类名为beans.RabbitConnectionFactory并具有单个参数“上下文”(它是您的属性上下文)。您可以根据需要指定bean id。

public class RabbitConnectionFactory extends ConnectionFactory {

    public RabbitConnectionFactory(Properties properties) {
        setHost(properties.getProperty("amqp_host"));
        setPort(Integer.parseInt(properties.getProperty("amqp_port")));
        setUsername(properties.getProperty("amqp_user"));
        setPassword(properties.getProperty("amqp_password"));
    }
}
 类似资料:

相关问答

相关文章

相关阅读