玩转springboot + rabbitmq

1.rabbitmq

主要结构
https://img-blog.csdnimg.cn/20190903141227300.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1Mzg3OTQw,size_16,color_FFFFFF,t_70

1.2几个重要概念

(1) Queue

消息队列,用来存放消息。
生产者生产消息,发送最终发送到队列C1,C2中
在这里插入图片描述

(2) Message durability

消息持久化,我们可以将Queue与Message都设置为可持久化的

(3) Prefetch count

https://www.cnblogs.com/williamjie/p/9481774.html比较详细,大概就是说,

  • 如果一个消息队列被多个消费者订阅,
  • Queue中的消息会被平摊给多个消费者
  • 如果某一个消费者处理得慢,另一个消费者处理得慢,那么就会导致一个消费者正在忙,另一个消费者处在空闲
  • 设置Prefetch count限制每次发送给消费者的消息数量,假如Prefetch count=1
  • 那么一次队列只发给消费者一个消息

(限制队列一次发送给消费者消息的数量)

(5)Exchange

生产者发送消息到exchange(交换机),由exchang转发到指定的一个或多个queue,那么exchange如何确定要转发到哪一个queue呢?(请看binding那一节)
在这里插入图片描述

(6)routing key

生产者在生产消息时,会指定routing key路由规则(要发到哪些个queue),而这个routing key需要与Exchange Type及binding key联合使用才能最终生效。(下面会介绍到)

(7)Binding

RabbitMQ中通过Binding将Exchange与Queue关联起来
https://img2018.cnblogs.com/blog/774371/201908/774371-20190819104128931-1338459538.png

(7.1) Binding key

在绑定(Binding)Exchange与Queue的同时,一般会指定一个binding key。
当binding key与routing key相匹配时,消息将会被路由到对应的Queue中
Binding(BingKey,(exchange,queue))

(8)exchangeType

Exchange Type有fanout、direct、topic、headers

(8.1)fanout

anout类型的Exchange路由规则非常简单,它会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中。(路由到所有绑定的queue)

(8.2)direct

direct类型的Exchange路由规则也很简单,它会把消息路由到那些binding key与routing key完全匹配的Queue中。

(8.3)topic

exchang路由到rounting key 与 binding key 匹配的队列,当这里的匹配规则与direct不一样,有以下规则:
routing key 与 binding key 在命名方面:

  • routing key为一个句点号“. ”分隔的字符串(我们将被句点号“. ”分隔开的每一段独立的字符串称为一个单词),如“stock.usd.nyse”、“nyse.vmw”、“quick.orange.rabbit”
  • binding key与routing key一样也是句点号“. ”分隔的字符串

匹配规则方面:

  • binding key中可以存在两种特殊字符 * 与 # ,用于做模糊匹配,其中 * 用于匹配一个单词,# 用于匹配多个单词(可以是零个)

假如消息routing key 为 quick.orange.rabbit,那么匹配Q1和Q2的binding key
在这里插入图片描述

2. springboot + rabbitmq

demo地址 https://github.com/jccccccc16/rabbitmq-study-demo

2.1 direct 交换器

配置

@Configuration
public class RabbitMQConfig {
   

// 定义名为queue01的队列,
    @Bean
    public Queue queue01(){
   
        return new Queue("queue01",true);
    }

// 定义一个directExchange
    @Bean
    public DirectExchange directExchange(){
   
        return new DirectExchange("directExchange01",true,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值