首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache + RabbitMq - Camel定义自己的队列,不会从已经定义的队列中读取

Apache + RabbitMq - Camel定义自己的队列,不会从已经定义的队列中读取
EN

Stack Overflow用户
提问于 2020-05-23 10:37:24
回答 2查看 1.2K关注 0票数 2

我有一个问题,我想让Camel-RabbitMq从我自己定义的队列中消费。通过骆驼路线从队列中写入和阅读是有效的,但只有通过骆驼自己定义的队列才有效。我似乎无法将Camel指向我在RabbitMQ上定义的队列。

基本信息

我正在通过Spring V2.3.0.RELEASE运行camel版本&camel-rabbitmqV3.3.0。我在我的本地主机上运行了两个服务:

本地主机上的

  • :5672 a RabbitMq v3.8.3实例
  • on localhost:15672 a RabbitMq管理实例

我通过一个简单的docker-组合文件运行这些实例:

代码语言:javascript
复制
version: '3'
services:
  rabbitmq:
    image: "rabbitmq:3.8.3"
    ports:
      - "5672:5672"
  rabbitmq-management:
    image: "rabbitmq:3-management"
    ports:
      - "15672:15672"

在那里,我通过管理面板创建了一个exchange和一个队列:

  • in_queue

  • main_exchange main_exchange

Main_exchange和in_queue通过路由密钥"in_queue_routing_key“路由密钥相互绑定。

问题

现在,当我试图通过骆驼路径连接这个in_queue时:

代码语言:javascript
复制
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发布消息时,什么都不会发生。骆驼路线没有接收到信息。

我尝试了以下可能的解决方案:

  • 将被动设置为true,这样RabbitMq就不会使队列本身。被动队列依赖于RabbitMQ.

中已经可用的队列。

  • 设置声明为false,因此RabbitMq不声明交换和队列本身。如果选项为真,camel将声明exchange和队列名称并将它们绑定在一起。如果选项为false,则骆驼将不会在服务器上声明交换和队列名称。

写入队列的

  • 工作正常,但它没有通过管理控制台(

)显示在自定义的“队列中”中。

代码示例:

代码语言:javascript
复制
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路线定义它的队列在其他地方。我如何定义骆驼路线消耗的是我自己定义的队列,而不是自己定义的队列?

资料来源:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-23 17:56:23

看起来我发现了错误,Rabbitmq有一个管理+实例映像,而不是一个独立的管理映像。这导致运行了两个RabbitMQ实例,一个是我正在轮询和查看的实例,另一个是操作发生的情况,导致我找不到任何东西,只有应用程序仍然工作。

这是我现在的停靠-撰写文件:

代码语言:javascript
复制
version: '3'
services:
  rabbitmq-with-management:
    image: "rabbitmq:3-management"
    ports:
      - "5672:5672"
      - "15672:15672"

现在一切都如愿了。

票数 2
EN

Stack Overflow用户

发布于 2020-05-27 11:46:33

This answer也有类似的问题,属性的完全匹配是问题所在。

因此,如果您的连接字符串与预定义的队列的属性不完全匹配,Camel将“找不到”并创建自己的连接字符串。差异可以隐藏在骆驼消费者的默认值中。

在上述答案中,区别是autoDelete标志。在骆驼中,它似乎是默认的true,当它是兔子队列中的false时,就没有匹配了。

他们必须将&autoDelete=false添加到连接字符串以匹配预定义的队列。

也许您也有一个与预定义队列的“属性匹配问题”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61970725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档