我有一个问题,我想让Camel-RabbitMq从我自己定义的队列中消费。通过骆驼路线从队列中写入和阅读是有效的,但只有通过骆驼自己定义的队列才有效。我似乎无法将Camel指向我在RabbitMQ上定义的队列。
基本信息
我正在通过Spring V2.3.0.RELEASE运行camel版本&camel-rabbitmqV3.3.0。我在我的本地主机上运行了两个服务:
本地主机上的
我通过一个简单的docker-组合文件运行这些实例:
version: '3'
services:
rabbitmq:
image: "rabbitmq:3.8.3"
ports:
- "5672:5672"
rabbitmq-management:
image: "rabbitmq:3-management"
ports:
- "15672:15672"在那里,我通过管理面板创建了一个exchange和一个队列:
Main_exchange和in_queue通过路由密钥"in_queue_routing_key“路由密钥相互绑定。
问题
现在,当我试图通过骆驼路径连接这个in_queue时:
from("rabbitmq:main_exchange?addresses=localhost:5672" +
"&passive=true"+
"&autoDelete=false" +
"&declare=false" +
"&queue=in_queue" +
"&routingKey=in_queue_routing_key")
.log("received from queue")
.to("file:done");当我通过主交换向in_queue发布消息时,什么都不会发生。骆驼路线没有接收到信息。
我尝试了以下可能的解决方案:
中已经可用的队列。
写入队列的
)显示在自定义的“队列中”中。
代码示例:
from("file:test")
.log("add to route")
.to("rabbitmq:main_exchange?addresses=localhost:5672" +
"&passive=true"+
"&autoDelete=false" +
"&declare=false" +
"&queue=in_queue" +
"&routingKey=in_queue_routing_key");但是,消费者路由在重新启动使用者路由(上面的代码示例)之后就会恢复。
因此,它看起来像骆驼-拉比it路线定义它的队列在其他地方。我如何定义骆驼路线消耗的是我自己定义的队列,而不是自己定义的队列?
资料来源:
发布于 2020-08-23 17:56:23
看起来我发现了错误,Rabbitmq有一个管理+实例映像,而不是一个独立的管理映像。这导致运行了两个RabbitMQ实例,一个是我正在轮询和查看的实例,另一个是操作发生的情况,导致我找不到任何东西,只有应用程序仍然工作。
这是我现在的停靠-撰写文件:
version: '3'
services:
rabbitmq-with-management:
image: "rabbitmq:3-management"
ports:
- "5672:5672"
- "15672:15672"现在一切都如愿了。
发布于 2020-05-27 11:46:33
This answer也有类似的问题,属性的与完全匹配是问题所在。
因此,如果您的连接字符串与预定义的队列的属性不完全匹配,Camel将“找不到”并创建自己的连接字符串。差异可以隐藏在骆驼消费者的默认值中。
在上述答案中,区别是autoDelete标志。在骆驼中,它似乎是默认的true,当它是兔子队列中的false时,就没有匹配了。
他们必须将&autoDelete=false添加到连接字符串以匹配预定义的队列。
也许您也有一个与预定义队列的“属性匹配问题”。
https://stackoverflow.com/questions/61970725
复制相似问题