Rabbitmq入门与应用(四)-RabbitMQ常见模式

RabbitMQ常见Queue模式

简单模式

点对点模式,一个生产者一个消费者

生产者将消息发送到队列,消费者从队列中获取消息,队列是存储消息的缓冲区

查看管理端效果
序列化解决方案
  • 基于java序列化
  • 基于Json
java 复制代码
@Bean
public MessageConverter messageConverter() {
	return new Jackson2JsonMessageConverter();
}

@Bean
public RabbitTemplate rabbitTemplate() {
    RabbitTemplate rabbitTemplate = new RabbitTemplate(factory);
    rabbitTemplate.setMessageConverter(messageConverter());
    :
    :
}

基于json

Work queues

工作队列模式:

一个生产者,多个消费者

  • C1,C2 是否都收到
  • 假设只有一个收到,谁收到(先)

结果: 只有一个消费者消费,轮训(负载均衡)的方式进行消费

java 复制代码
@Bean
public Queue workQueue() {
    return new Queue(RabbitMQConstants.WORK_QUEUE, DURABLE);
}

发布订阅/fanout模式

生产者通过fanout扇出交换机群发消息给消费者,同一条消息每一个消费者都可以收到。

java 复制代码
@Bean
public Binding bindingFanoutA(){
    return BindingBuilder
            .bind(fanoutQueueA())
            .to(fanoutExchange());
}

/**

 * Fanout交换机和队列B绑定
 * @return
   */
   @Bean
   public Binding bindingFanoutB(){
   return BindingBuilder
           .bind(fanoutQueueB())
           .to(fanoutExchange());
   }

routing模式

配置
java 复制代码
    @Bean
    public Queue routingYellowQueue(){
        return new Queue(RabbitMQConstants.ROUTING_YELLOW_QUEUE,DURABLE);
    }
    @Bean
    public Queue routingBlueQueue(){
        return new Queue(RabbitMQConstants.ROUTING_BLUE_QUEUE,DURABLE);
    }

    @Bean
    public DirectExchange routingExchange(){
        return new DirectExchange(RabbitMQConstants.ROUTING_EXCHANGE,DURABLE,AUTO_DELETE);
    }


    @Bean
    public Binding routingYellowBinding(){
        return BindingBuilder
                .bind(routingYellowQueue())
                .to(routingExchange())
                .with(RabbitMQConstants.ROUTING_YELLOW_KEY);
    }

    @Bean
    public Binding routingBlueBinding(){
        return BindingBuilder
                .bind(routingBlueQueue())
                .to(routingExchange())
                .with(RabbitMQConstants.ROUTING_BLUE_KEY);
    }
生产者
java 复制代码
  @Override
    public void routingOrder() {

        Order order= new Order();
        order.setBook(41L);
        order.setStatus("未支付");
        order.setTotal(5);
        order.setTime(new Date());
        
        rabbitTemplate.convertAndSend(
                RabbitMQConstants.ROUTING_EXCHANGE,     
                RabbitMQConstants.ROUTING_YELLOW_KEY,  //routing到yellow线路
                order);
        log.debug("[routing工作模式: ] 产生一个订单-->{}",order);
    }

topic模式

* 任意个任意一字符串

0或一个任意字符串

cba.topic.abc

topic.* ---只有一个字符串

  • topic.orange

topic.# ----> 0个字符串或者多个字符串(用户点号分开的)

  • topic
  • topic.abc
  • topic.abc.banana
java 复制代码
    @Bean
    public Binding topicOrangeBinding(){
        return BindingBuilder
                .bind(topicOrangeQueue())
                .to(topicExchange())
                .with("*.fruit.*");  //*.fruit.*
    }

    @Bean
    public Binding topicBananaBinding(){
        return BindingBuilder
                .bind(topicBananaQueue())
                .to(topicExchange())
                .with("#.fruit.*");
    }
相关推荐
小北方城市网3 小时前
MySQL 索引优化实战:从慢查询到高性能
数据库·spring boot·后端·mysql·rabbitmq·mybatis·java-rabbitmq
2501_941805314 小时前
使用Python和Go构建高性能分布式任务调度系统的实践分享
分布式·python·golang
不想写bug呀4 小时前
RabbitMQ相关问题(1)
java·rabbitmq
徐先生 @_@|||4 小时前
数据分析体系全览导图综述
大数据·hadoop·分布式·数据分析
虹科网络安全5 小时前
艾体宝洞察 | 缓存策略深度解析:从内存缓存到 Redis 分布式缓存
redis·分布式·缓存
廋到被风吹走8 小时前
【消息队列】选型深度对比:Kafka vs RocketMQ vs RabbitMQ
kafka·rabbitmq·rocketmq
YE1234567_8 小时前
从底层零拷贝到分布式架构:深度剖析现代 C++ 构建超大规模高性能 AI 插件引擎的实战之道
c++·分布式·架构
笃行客从不躺平8 小时前
Seata + AT 模式 复习记录
java·分布式
洛阳纸贵9 小时前
JAVA高级工程师-消息中间件RabbitMQ工作模式(二)
java·rabbitmq·java-rabbitmq
像少年啦飞驰点、9 小时前
Java大厂面试真题:Spring Boot + Kafka + Redis 在电商场景下的实战应用
java·spring boot·redis·分布式·kafka·面试题·电商秒杀