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);
    }
}
相关推荐
abcnull1 小时前
Springboot+Vue2的Web项目小白入门Demo快速学习!
java·elementui·vue·maven·springboot·web·小白
2501_932750261 小时前
Java IO流基础全面详解:字节流、字符流
java·开发语言
逸Y 仙X2 小时前
文章二十二:ElasticSearch EQL事件查询语言
java·大数据·elasticsearch·搜索引擎·全文检索
liulilittle2 小时前
LLAMA-CLI 运行千问3.6(R9-7945HX+64G+RTX40608G)
java·前端·llama
后端漫漫2 小时前
Redis 键值对序列化
java·redis
Lenyiin2 小时前
《LeetCode 顺序刷题》61 - 70
java·c++·python·算法·leetcode·lenyiin
敲代码的瓦龙2 小时前
Android?基础UI控件!!!
java·开发语言
Hesionberger2 小时前
LeetCode 78:子集生成全攻略
java·开发语言·数据结构·python·算法·leetcode·职场和发展
bzmK1DTbd2 小时前
Swagger API文档:Java RESTful服务的自动生成
java·开发语言·restful