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

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

仇睿
2023-03-14
    null

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

version: '3'
services:
  rabbitmq:
    image: "rabbitmq:3.8.3"
    ports:
      - "5672:5672"
  rabbitmq-management:
    image: "rabbitmq:3-management"
    ports:
      - "15672:15672"

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

  • main_exchange
  • 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时,什么也不会发生。骆驼路线不能接收信息。

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

>

  • 将passive设置为true,因此RabbitMq本身不创建队列。

    被动队列取决于RabbitMQ中已经可用的队列。

    如果该选项为true,则camel声明交换和队列名称并将它们绑定在一起。如果该选项为false,camel将不会在服务器上声明exchange和队列名称。

    代码示例:

    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");
    

    但是在重新启动消费者路由(这个代码示例上面的路由)之后,消费者路由确实恢复了。

    资料来源:

    • https://camel.apache.org/components/latest/rabbitmq-component.html
  • 共有1个答案

    单凯捷
    2023-03-14

    看起来我发现了一个错误,Rabbitmq有一个管理+实例映像,而不是一个独立的管理映像。这导致运行了两个RabbitMQ实例,其中一个是我正在轮询并查看的,第二个是操作发生的地方,导致我没有找到任何东西,但应用程序仍在工作。

    这是我的docker-compose文件:

    version: '3'
    services:
      rabbitmq-with-management:
        image: "rabbitmq:3-management"
        ports:
          - "5672:5672"
          - "15672:15672"
    

    现在一切都按预期进行。

     类似资料:
    • 下面是两种主要的方法。 代码:

    • 考虑下面的优先级类声明<代码>类优先级队列 我的想法: 我能想到的一件事是,这将强制优先级队列使用对象比较器,并且不会提供实现其自定义比较器的能力,因为类的用户可能希望基于某个不同的比较器构建队列。

    • priority_queue,comparator(query,d)>min_heap; main.cpp:20:7:注意:“comparator”不是文字,因为: class comparator{ main.cpp:20:7:注意:“comparator”不是聚合,没有普通的默认构造函数,也没有不是复制或移动构造函数的constexpr构造函数 Main.cpp:92:65:注意:应为类型,但

    • 使用自定义运算符声明这样的优先级队列时出错 错误- ^/代码/解决方案。cpp:33:32:错误:在“,”令牌优先级_队列(间隔、向量、比较1)p之前应为主表达式; ^/代码/解决方案。cpp:33:49:错误:在“,”令牌优先级_队列(间隔、向量、比较1)p之前应为主表达式^ /code/Solution.cpp:33: 58:错误:预期的主表达式之前')'令牌priority_queue(区间

    • 我将与一起使用中的这个库。所有使用者均为,所有队列均为(4小时)。 我有很多队列没有任何挂起的ack,但仍然保存着数百条消息。此外,队列不会在应该过期时过期,这将在几天后产生性能问题。我没有找到任何理由来解释为什么消息在ack处理之后仍然在队列中。 谢谢 管理工具中的一些快照:

    • 我使用的是PriorityQueue和我自己的比较器,但最终结果并不总是好的。我应该按平均成绩、姓名、身份证进行排序。最后,它应该返回队列中剩余的名称。其余的名字都很好,但顺序不同。输入(名称、平均等级、识别号): 预期产出: 我的结果: 你能帮我找出问题所在吗?提前谢谢你!