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);
    }
}
相关推荐
大圣编程1 小时前
Java 多维数组详解
java·开发语言
万法若空3 小时前
【算法-查找】查找算法
java·数据结构·算法
HZZD_HZZD6 小时前
DL/T 645-2026新国标深度解读与智能电表协议适配实战:从帧结构变化到Java采集器升级的全链路改造方案
java·开发语言
山登绝顶我为峰 3(^v^)38 小时前
C/C++ 交叉编译方法
java·c语言·c++
一叶飘零_sweeeet9 小时前
Codex 与 Claude Code 深度拆解:两代 AI 编程智能体的技术本质与 Java 实战指南
java·ai·codex·claude code
Listen·Rain9 小时前
提示词和提示词模板
java·人工智能·spring boot
wuqingshun3141599 小时前
重写equals而不重写hashCode,会出什么问题?
java·开发语言
我今晚不熬夜9 小时前
Java语言实现Modbus协议通过用串口读取数据(以RTU为例)
java·网络协议
小锋java123410 小时前
Maven 4 要来了:15 年后,Java 构建工具迎来"彻底重构"
java·maven