java rabbitmq 队列在Springboot的设计

最简单模式一:生产者producer+队列queue+消费者consuner

生产者producer:

//注入发送模板

复制代码
@Autowired private RabbitTemplate rabbitTemplate;

//生产者发送信息

@PostMapping("rabbimq")
public String rebbimq(@RequestBody User user) {
    String msg = "队列进来了。。。";
    rabbitTemplate.convertAndSend("simple.queue", msg);
    return msg;
}
复制代码
//队列queue:注册队列
复制代码
@Configuration
public class RabbitMqConfig {
    @Bean
    Queue queue() {
        return new Queue("simple.queue");
    }
}
复制代码
//因为Java要序列号,或者json格式才能通信传输,所以要转格式;
@Bean
Jackson2JsonMessageConverter jackson2JsonMessageConverter() {
    return new Jackson2JsonMessageConverter();
}

消费者consuner

复制代码
@Service
public class RabbitmqListenerMsg {
    @RabbitListener(queues = "simple.queue")
    public void handleMsg(String msg) {
        System.out.println("处理队列完成:" + msg);
    }
}

模式二(工作队列模式):生产者producer+队列queue+消费者consuner

//注入发送模板

复制代码
@Autowired private RabbitTemplate rabbitTemplate;

//生产者发送信息

复制代码
@PostMapping("/rabbimqSend")
public Map<String,Object> sendMap(){
    Map<String,Object> map = new HashMap<>();
    map.put("name","韦锦林");
    map.put("age","37");
    map.put("addr","贵州");
    rabbitTemplate.convertAndSend("work.queue", map);
    return map;
}
复制代码
//队列queue:注册队列
复制代码
@Configuration
public class RabbitMqConfig {
    @Bean
    Queue queue() {
        return new Queue("simple.queue");
    }
   //因为Java要序列号,或者json格式才能通信传输,所以要转格式; 
   @Bean 
   Jackson2JsonMessageConverter jackson2JsonMessageConverter() { 
     return new Jackson2JsonMessageConverter(); 
 }
}
复制代码

消费者consuner

复制代码
@Service
public class RabbitmqListenerMsg {
    @RabbitListener(queues = "work.queue")
    public void handleMsg(Map<String,Object> map) {
        System.out.println("处理队列完成A消费:" + map);
    }
    @RabbitListener(queues = "work.queue")
    public void handleMsgB(Map<String,Object> map) {
        System.out.println("处理队列完成B消费:" + map);
    }
}

模式三(路由队列模式):生产者producer+队列queue+交换机exchange+消费者consuner

//注入发送模板

复制代码
@Autowired private RabbitTemplate rabbitTemplate;

//生产者发送信息

复制代码
@PostMapping("/rabbimqSend")
public Map<String,Object> sendMap(){
    Map<String,Object> map = new HashMap<>();
    map.put("name","韦锦林");
    map.put("age","37");
    map.put("addr","贵州");
    rabbitTemplate.convertAndSend("work.queue", map);
    return map;
}
复制代码
//队列queue:注册队列
复制代码
@Configuration
public class RabbitMqConfig {
    @Bean
    Queue queue() {
        return new Queue("simple.queue");
    }
复制代码
    //交换机
   @Bean
   public Exchange builExchange(){
      return ExchangeBuilder.directExchange("route.exchange").durable(true).build();
   }
   //路由绑定
   @Bean
   public Binding builBinding(Queue queue,DirectExchange exchange){
       return BindingBuilder.bind(queue).to(exchange).withQueueName();
   }
复制代码
   //因为Java要序列号,或者json格式才能通信传输,所以要转格式;
   @Bean
   Jackson2JsonMessageConverter jackson2JsonMessageConverter() {
      return new Jackson2JsonMessageConverter();
   }
复制代码
}

消费者consuner

复制代码
@Service
public class RabbitmqListenerMsg {
    @RabbitListener(queues = "work.queue")
    public void handleMsg(Map<String,Object> map) {
        System.out.println("处理队列完成A消费:" + map);
    }
    @RabbitListener(queues = "work.queue")
    public void handleMsgB(Map<String,Object> map) {
        System.out.println("处理队列完成B消费:" + map);
    }
}

模式四(主题队列模式):生产者producer+队列queue+交换机exchange+消费者consuner

//注入发送模板

复制代码
@Autowired private RabbitTemplate rabbitTemplate;

//生产者发送信息

复制代码
@PostMapping("/rabbimqSend")
复制代码
public Map<String,Object> sendMap(){
    Map<String,Object> map = new HashMap<>();
    map.put("name","韦锦林");
    map.put("age","37");
    map.put("addr","贵州");
    //指定队列队列执行:order和log执行,可以加可减
    rabbitTemplate.convertAndSend("topic.exchange","order.log", map);
    return map;
}
复制代码
//队列queue:注册队列
复制代码
@Configuration
public class RabbitMqConfig {
    //订单队列
    @Bean("order")
    Queue queue() {
        return new Queue("order.queue");
    }

    //用户队列
    @Bean("user")
    Queue queue2() {
        return new Queue("user.queue");
    }

    //日志队列
    @Bean("log")
    Queue queue3() {
        return new Queue("log.queue");
    }

    //交换机
    @Bean
    public Exchange builExchange() {
        return ExchangeBuilder.topicExchange("topic.exchange").durable(true).build();
    }

    //路由绑定队列1
    @Bean
    public Binding builBinding(
            @Qualifier("order") Queue queue,
            TopicExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("#.order.#");
    }
    //路由绑定队列2
    @Bean
    public Binding builBinding2(
            @Qualifier("user") Queue queue,
            TopicExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("#.user.#");
    }
    //路由绑定队列3
    @Bean
    public Binding builBinding3(
            @Qualifier("log") Queue queue,
            TopicExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("#.log.#");
    }


    //因为Java要序列号,或者json格式才能通信传输,所以要转格式;
    @Bean
    Jackson2JsonMessageConverter jackson2JsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }
}

消费者consuner

复制代码
@Service
public class RabbitmqListenerMsg {
    @RabbitListener(queues = "order.queue")
    public void handleMsg(Map<String,Object> map) {
        System.out.println("处理队列完成_order消费:" + map);
    }
    @RabbitListener(queues = "user.queue")
    public void handleMsg2(Map<String,Object> map) {
        System.out.println("处理队列完成_user消费:" + map);
    }
    @RabbitListener(queues = "log.queue")
    public void handleMsg3(Map<String,Object> map) {
        System.out.println("处理队列完成_log消费:" + map);
    }
}

广播模式五:生产者producer+队列queue+消费者consuner

//注入发送模板

复制代码
@Autowired private RabbitTemplate rabbitTemplate;

//生产者发送信息

复制代码
@PostMapping("/rabbimqSend")
复制代码
public Map<String,Object> sendMap(){
    Map<String,Object> map = new HashMap<>();
    map.put("name","韦锦林");
    map.put("age","37");
    map.put("addr","贵州");
    //指定队列队列执行
    rabbitTemplate.convertAndSend("fanout.exchange","", map);
    return map;
}
复制代码
//队列queue:注册队列
复制代码
@Configuration
复制代码
public class RabbitMqConfig {
    //订单队列
    @Bean("order")
    Queue queue() {
        return new Queue("order.queue");
    }

    //用户队列
    @Bean("user")
    Queue queue2() {
        return new Queue("user.queue");
    }

    //日志队列
    @Bean("log")
    Queue queue3() {
        return new Queue("log.queue");
    }

    //交换机
    @Bean
    public Exchange builExchange() {
        return ExchangeBuilder.fanoutExchange("fanout.exchange").durable(true).build();
    }

    //路由绑定队列1
    @Bean
    public Binding builBinding(
            @Qualifier("order") Queue queue,
            FanoutExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange);
    }
    //路由绑定队列2
    @Bean
    public Binding builBinding2(
            @Qualifier("user") Queue queue,
            FanoutExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange);
    }
    //路由绑定队列3
    @Bean
    public Binding builBinding3(
            @Qualifier("log") Queue queue,
            FanoutExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange);
    }


    //因为Java要序列号,或者json格式才能通信传输,所以要转格式;
    @Bean
    Jackson2JsonMessageConverter jackson2JsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }
}

消费者consuner

复制代码
@Service
public class RabbitmqListenerMsg {
    @RabbitListener(queues = "order.queue")
    public void handleMsg(Map<String,Object> map) {
        System.out.println("处理队列完成_order消费:" + map);
    }
    @RabbitListener(queues = "user.queue")
    public void handleMsg2(Map<String,Object> map) {
        System.out.println("处理队列完成_user消费:" + map);
    }
    @RabbitListener(queues = "log.queue")
    public void handleMsg3(Map<String,Object> map) {
        System.out.println("处理队列完成_log消费:" + map);
    }
}
相关推荐
Lei活在当下6 小时前
先用起来,再理解,关于协程Coroutine应该知道的事
android·java·jvm
Java爱好狂.6 小时前
Java程序员体系化学习路线(2026最新版)
java·后端·java面试·java架构师·java程序员·java八股文·java学习路线
tongluowan0076 小时前
以ReentrantLock为例解释AQS的工作流程
java·模板方法模式·aqs·reentrantlock
身如柳絮随风扬7 小时前
Java 项目打包与部署完全指南:JAR vs WAR,从构建到运行
java·firefox·jar
云烟成雨TD8 小时前
Spring AI Alibaba 1.x 系列【62】时光旅行(Time-Travel)
java·人工智能·spring
浩少7028 小时前
【无标题】
java·开发语言
一棵白菜8 小时前
java 学习
java
卷毛的技术笔记8 小时前
Java后端硬核实战:用Spring AI Alibaba+Redis给LLM装上“超强记忆中枢”
java·人工智能·redis·后端·spring·ai·系统架构
AKA__Zas10 小时前
初识多线程(3.0)
java·开发语言·学习方法
北漂人Java10 小时前
SpringAI-2.Spring AI整合本地模型和云端大模型
java·spring