missz
V2EX  ›  Java

rabbitmq 关于 Routing key 的疑问

  •  2
     
  •   missz · Jan 28, 2021 · 2358 views
    This topic created in 1938 days ago, the information mentioned may be changed or developed.
        @RabbitListener(bindings = @QueueBinding(
                value = @Queue(value = "message", durable = "true"),
                exchange = @Exchange(name = "pxm-message") //交换机名称,durable 指是否持久化到数据库,type:模式
                , key = "message.test"
        ))
        @RabbitHandler
        public void testMessage(Message message, Channel channel) throws Exception {
            //消费者操作
            logger.info("*****messgae.test,开始消费*****");
            if (message.getBody() != null) {
                String competitions = new String(message.getBody());
                logger.info("消费端接收到消息 1:{},{}", competitions, message.getMessageProperties());
            }
            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
    
        }
    

    按照 Routing key 的规则,这段代码应该只会消费 message.test 中的消息 但是这段代码执行后将 message.test2 的消息也消费了

    yp1X7T.png

    3 replies    2021-01-28 17:22:00 +08:00
    yazinnnn
        1
    yazinnnn  
       Jan 28, 2021
    看上去你这是一个队列对一交换机 bind 了两个 routing key

    message.test 只是你的 routing key 吧
    xuanbg
        2
    xuanbg  
       Jan 28, 2021
    消费是基于队列的,和 route-key 没关系。route-key 是用来发消息的,你只需要知道交换机和 route-key,不需要知道队列。
    ty916
        3
    ty916  
       Jan 28, 2021
    交换机的 type 是 fanout 还是 direct
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2439 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 16:04 · PVG 00:04 · LAX 09:04 · JFK 12:04
    ♥ Do have faith in what you're doing.