RabbitMq 理论基础(五)队列角度去看待问题之五种基本的队列

交换机 角度我们讲完了,下面从队列角度去看待问题
五种基本的队列
在这里插入图片描述
1.简单队列
生产者将消息发送到队列,消费者从队列中获取消息。
上代码:*
(1)配置类

package com.zyw.rabbitmq.config.queue;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author zyw
 * 简单队列(配置队列)
 */
@Configuration
public class RabbitQuereConfig {
    @Bean
    public Queue queue() {
        return new Queue("industry");
    }
}

(2)生产者

package com.zyw.rabbitmq.controller.queue;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;

/**
 * @author  zyw
 */
@Component
public class industrySender {
    @Autowired
    RabbitTemplate rabbitTemplate;
    /**
     * 简单队列发送消息
     */
    @Scheduled(cron = "0 */1 * * * ?")
    public void show(){
        System.out.println("简单队列开始");
        Map<String,Object> map = new HashMap<>();
        map.put("id","1111");
        map.put("name","简单队列");
        //简单对列的情况下routingKey即为Q名
        rabbitTemplate.convertAndSend("industry",map);
    }
}

(3)消费者

package com.zyw.rabbitcustomer.queue;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.util.Map;

/**
 * @author zyw
 * 简单队列消费者
 */
@Component
@RabbitListener(queues = "industry")
public class IndustryReceiver {
    @RabbitHandler
    public void process(Map msg) {
        System.out.println("简单队列Receiver  : " + msg.toString());
    }
}

就这样 简单队列就写完了。我们其实会发现 这里没有路由绑定,只有队列的名称

2.多对多使用(Work模式)竞争消费者模式
一个生产者对应多个消费者,但是只能有一个消费者获得消息
使用场景

Work Queues 工作队列主要适合执行资源密集型任务。一个生产者创建的任务,需要配置多个消费者来执行任务。
这种模式下,存在任务均匀分配和消费者竞争执行的两个情况。

以上两个小结:
简单队列和work 模式的不同:
简单队列只要消息从队列中获取,无论消费者获取到消息后是否成功消费,比如遇到状况:断电,都认为是消息已经成功消费;
work模式消费者从队列中获取消息后,服务器会将该消息标记为不可用状态,等待消费者反馈,如果消费这一直没有反馈,则该消息一直处于不可用状态。 具体使用哪种模式具体问题具体分析。

以下三个都用到了交换机,所有本质上下面三个和交换机写法是一样的,效果也是一样的

3.Topic Exchange(主题模式
topic 是RabbitMQ中最灵活的一种方式,可以根据routing_key自由的绑定不同的队列
主题模式下的Exchange 交换机类型为Topic 。
Topics 模式和Routing 路由模式很相似,唯一区别在于路由键。Topic exchange 的路由键可以去进行模糊匹配。

4.Fanout Exchange(订阅模式
一个消费者将消息首先发送到交换器,交换器绑定到多个队列,然后被监听该队列的消费者所接收并消费。
Fanout 就是我们熟悉的广播模式或者订阅模式,给Fanout交换机发送消息,绑定了这个交换机的所有队列都收到这个消息
发布/订阅模式需要使用到Exchange 交换机,Exchange 的类型为fanout。
初始化环境时,需要将若干个队列绑定到 fanout Exchange 上。
工作中,Exchange 接受到的每一条消息,都会广播给所有与自身绑定的队列中。
这种场景适合同一个任务,需要由多个消费者分别执行的情况。

5.路由模式
生产者将消息发送到direct交换器,在绑定队列和交换器的时候有一个路由key,生产者发送的消息会指定一个路由key,那么消息只会发送到相应key相同的队列,接着监听该队列的消费者消费消息。
路由模式下的Exchange 交换机的类型为 Direct
初始化环境时,Direct Exchange 通过绑定键和Queue队列进行绑定,每个队列都有选择性的接受部分消息(和绑定键匹配的)。
工作中,Exchange 接受到的消息中的路由键和绑定键进行匹配,匹配成功则转发到相应的Queue队列中。
这个场景适合对任务进行分类处理的情况。

前面五种队列模式介绍完了,但是实际上只有三种,第一种简单队列,第二种工作模式,剩下的三种都是和交换器绑定的合起来称为一种。**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值