SpringBoot 整合 RabbitMQ 五种消息模型实战

发布时间:2026/8/3 1:34:44
SpringBoot 整合 RabbitMQ 五种消息模型实战 RabbitMQ 是消息队列中的主流方案。这篇讲 SpringBoot 整合 RabbitMQ 的五种消息模型。一、引入依赖dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-amqp/artifactId/dependency二、配置spring:rabbitmq:host:localhostport:5672username:guestpassword:guest三、工作队列模式Work QueueConfigurationpublicclassRabbitConfig{publicstaticfinalStringQUEUEqueue.work;BeanpublicQueueworkQueue(){returnnewQueue(QUEUE);}}ServicepublicclassWorkProducer{AutowiredprivateRabbitTemplaterabbitTemplate;publicvoidsend(Stringmessage){for(inti0;i10;i){rabbitTemplate.convertAndSend(RabbitConfig.QUEUE,message:i);}}}ComponentpublicclassWorkConsumer1{RabbitListener(queuesRabbitConfig.QUEUE)publicvoidreceive(Stringmessage){System.out.println(消费者1收到: message);try{Thread.sleep(1000);}catch(Exceptione){}}}四、发布订阅模式Publish/SubscribeConfigurationpublicclassFanoutConfig{BeanpublicFanoutExchangefanoutExchange(){returnnewFanoutExchange(exchange.fanout);}BeanpublicQueuequeueA(){returnnewQueue(queue.fanout.a);}BeanpublicQueuequeueB(){returnnewQueue(queue.fanout.b);}BeanpublicBindingbindingA(){returnBindingBuilder.bind(queueA()).to(fanoutExchange());}BeanpublicBindingbindingB(){returnBindingBuilder.bind(queueB()).to(fanoutExchange());}}五、路由模式RoutingConfigurationpublicclassDirectConfig{publicstaticfinalStringQUEUE_INFOqueue.direct.info;publicstaticfinalStringQUEUE_ERRORqueue.direct.error;BeanpublicDirectExchangedirectExchange(){returnnewDirectExchange(exchange.direct);}BeanpublicQueueinfoQueue(){returnnewQueue(QUEUE_INFO);}BeanpublicQueueerrorQueue(){returnnewQueue(QUEUE_ERROR);}BeanpublicBindinginfoBinding(){returnBindingBuilder.bind(infoQueue()).to(directExchange()).with(info);}BeanpublicBindingerrorBinding(){returnBindingBuilder.bind(errorQueue()).to(directExchange()).with(error);}}ServicepublicclassDirectProducer{AutowiredprivateRabbitTemplaterabbitTemplate;publicvoidsendError(Stringmessage){// 只有 errorQueue 会收到rabbitTemplate.convertAndSend(exchange.direct,error,message);}}六、主题模式TopicConfigurationpublicclassTopicConfig{BeanpublicTopicExchangetopicExchange(){returnnewTopicExchange(exchange.topic);}BeanpublicQueueorderQueue(){returnnewQueue(queue.topic.order);}BeanpublicQueueuserQueue(){returnnewQueue(queue.topic.user);}BeanpublicBindingorderBinding(){returnBindingBuilder.bind(orderQueue()).to(topicExchange()).with(order.*);}BeanpublicBindinguserBinding(){returnBindingBuilder.bind(userQueue()).to(topicExchange()).with(user.#);}}七、五种模型对比模型Exchange类型路由方式场景简单/工作无默认直接任务分发发布订阅Fanout广播通知所有消费者路由Direct精确匹配按级别分发主题Topic通配符复杂路由RPC无同步请求-响应 觉得有用的话点赞 关注【张老师技术栈】吧