You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring AMQP + RabbitMQ RPC:如何在单个类中按属性执行不同方法

单个Spring AMQP类按路由键路由到不同方法的实现方案

你想要的功能完全可以实现!Spring AMQP的@RabbitListener注解天生支持在同一个类里定义多个方法,每个方法对应不同的路由键绑定,完美匹配你的需求。

先聊聊你当前代码可能踩的几个小坑:

  • Exchange类型不匹配:@Exchange注解默认类型是topic,如果你的消息用精确路由键发送,换成direct类型会更稳妥(topic也支持精确匹配,但direct是专门做精确路由键匹配的);
  • 消息参数转换问题:如果消息体无法被Spring正确转换成long类型,方法也不会触发,得确保消息转换器配置正确;
  • 绑定关系是否生效:如果队列requests已经存在,可能需要手动确认绑定关系,或者让Spring帮你自动声明绑定。

下面给你一个完整的可运行示例,直接参考就行:

import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class RequestMessageHandler {

    // 处理路由键为"doFunc1"的消息
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "requests", durable = "true"),
            exchange = @Exchange(value = "ourexchange", type = "direct"),
            key = "doFunc1"
    ))
    public String handleFunc1(long id) {
        System.out.println("Executing func1 with id: " + id);
        return "Processed by func1";
    }

    // 处理路由键为"doFunc2"的消息
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "requests", durable = "true"),
            exchange = @Exchange(value = "ourexchange", type = "direct"),
            key = "doFunc2"
    ))
    public String handleFunc2(long id) {
        System.out.println("Executing func2 with id: " + id);
        return "Processed by func2";
    }
}

再给你几个关键注意事项:

  • 发送消息时指定正确路由键:发送消息到ourexchange时,设置路由键为doFunc1会触发handleFunc1,设置为doFunc2则触发handleFunc2;
  • 消息转换器配置:如果你的消息是JSON格式的数字,记得配置Jackson2JsonMessageConverter,确保Spring能正确把消息体转成long类型;
  • 队列与绑定的声明:如果队列和Exchange已经提前创建好,可以在@QueueBinding里加上declare = false,避免Spring重复声明导致冲突。

按照这个示例调整后,应该就能实现你想要的功能啦!

内容的提问来源于stack exchange,提问作者Chad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:08:07