首页 > 其他分享 >3.两种模式与交换机和队列的属性

3.两种模式与交换机和队列的属性

时间:2023-06-04 13:12:35浏览次数:30  
标签:5.4 exchange 队列 交换机 消息 备用 属性

5.两种模式

5.1.Confirm介绍

消息的confirm确认机制,是指生产者投递消息后,到达了消息服务器Broker里面的exchange交换机,则会给生产者一个应答,生产者接收到应答,用来确定这条消息是否正常的发送到Broker的exchange中,这也是消息可靠性投递的重要保障

img

5.2.Confirm使用

5.2.1.环境搭建

①选择依赖

image-20230604101436598

②修改启动类

image-20230604101548283

③修改配置

image-20230604102114929

④绑定交换机

image-20230604102019836

5.2.2.普通写法

①回调类编写

image-20230604103910653

②发送消息

image-20230604103934819

③访问测试

不管是否正确的将消息发送到交换机,交换机都会返回一个结果

错误时

image-20230604103952868

正确时

image-20230604104110784

5.2.3.匿名内部类写法

①发送消息

在发送消息直接编写回调函数即可

image-20230604105656068

②测试

错误时

image-20230604105857592

正确时

image-20230604105927034

5.2.4.lambda写法

①发送消息

在发送消息直接编写回调函数即可

image-20230604110327159

②测试

错误时

image-20230604110434308

正确时

image-20230604110409372

5.3.Return介绍

rabbitmq 整个消息投递的路径为:producer —> exchange —> queue —> consumer

消息从producer到exchange 则会返回一个confirmCallback(confirm模式);

消息从exchange到queue投递失败则会返回一个returnCallback(return模式);

5.4.Return使用

和确认模式一样,可以写成匿名内部类,lambda表达式等写法

5.4.1.选择依赖

image-20230604111116780

5.4.2.修改启动类

image-20230604111257053

5.4.3.修改配置

image-20230604111903316

5.4.4.编写回调函数类

image-20230604111929987

5.4.5.发送消息

image-20230604111951091

5.4.6.测试

image-20230604112042560

6.交换机和队列参数

交换机和队列是在发送消息之后才进行创建

6.1.交换机参数

1.Name:交换机名字

2.Type:交换机类型,有direct, topic, fanout, headers四种

3.Durability:持久化,声明交换机是否持久化,代表交换机在服务器重启后是否还存在

4.Auto delete:是否自动删除,曾经有队列绑定到该交换机,后来解绑了,那就会自动删除该交换机

5.Internal:内部使用的,如果是yes,客户端无法直接发消息到此交换机,它只能用于交换机与交换机的绑定

6.Arguments:只有一个取值alternate-exchange,表示备用交换机

6.2.备用交换机

6.2.1.备用交换机使用场景

当消息经过交换器准备路由给队列的时候,发现没有对应的队列可以投递信息,在rabbitmq中会默认丢弃消息,如果我们想要监测哪些消息被投递到没有对应的队列,我们可以用备用交换机来实现,可以接收备用交换机的消息,然后记录日志或发送报警信息。

image-20230604114721485

备用交换机一般使用fanout交换机

p指定的路由key为hello,但是正常的交换机指定的路由key是info,所以正常交换机要指定一个备用交换机(使用fanout不用指定路由key)

6.2.2.使用

①选择依赖

image-20230604115621354

②修改配置

image-20230604115841075

③修改启动类

image-20230604115848037

④发送消息

image-20230604120414620

⑤绑定交换机

image-20230604120617884

⑥访问测试

image-20230604120637426

路由key错误就会进入到备用交换机

image-20230604120647812

6.3.队列参数

Type:队列类型

Name:队列名称

Durability:声明队列是否持久化,代表队列在服务器重启后是否还存在

Autodelete: 是否自动删除,如果为true,当没有消费者连接到这个队列的时候,队列会自动删除

Exclusive:exclusive属性的队列只对首次声明它的连接可见,并且在连接断开时自动删除;基本上不设置它,设置成false

Arguments:队列的其他属性,例如指定DLX(死信交换机等)

  1. x-expires:Number(单位毫秒)

    • 当Queue(队列)在指定的时间未被访问,则队列将被自动删除
  2. x-message-ttl:Number

    • 发布的消息在队列中存在多长时间后被取消
  3. x-overflow:String

    • 在死信队列的时候使用过
    • 队列溢出行为,当达到队列的最大长度时,消息会发生什么,有效值为Drop Head或Reject Publish
      1. Drop Head:当队列已满时,新消息将排在队列的“头部”,旧的消息将从“尾部”开始删除。
      2. Reject Publish:当队列已满时,RabbitMQ 将拒绝任何请求将新消息发布到队列中。
  4. x-max-length:Number

    • 队列所能容下消息的最大长度,当超出长度后,新消息将会覆盖最前面的消息,类似于Redis的LRU算法
  5. x-single-active-consumer:默认为false

  • 是否激活单一的消费者,也就是该队列只能有一个消息者消费消息;
  1. x-max-length-bytes:Number

    • 限定队列的最大占用空间,当超出后也使用类似于Redis的LRU算法
  2. x-dead-letter-exchange:String

    • 指定队列关联的死信交换机,有时候我们希望当队列的消息达到上限后溢出的消息不会被删除掉,而是走到另一个队列中保存起来
  3. x-dead-letter-routing-key:String

    • 指定死信交换机的路由键,一般和6一起定义
  4. x-max-priority:Number(0-255取值范围)

    • 如果将一个队列加上优先级参数,那么该队列为优先级队列

    • 给消息加上优先级属性,通过优先级特性,将一个队列实现插队消费

      MessageProperties messageProperties=new MessageProperties();  messageProperties.setPriority(8);
      
  5. x-queue-mode:String(理解下即可)

    • 队列类型x-queue-mode=lazy懒队列,在磁盘上尽可能多地保留消息以减少RAM使用,如果未设置,则队列将保留内存缓存以尽可能快地传递消息;
  6. x-queue-master-locator:String(用的较少)

    • 在集群模式下设置队列分配到的主节点位置信息

标签:5.4,exchange,队列,交换机,消息,备用,属性
From: https://www.cnblogs.com/Myvlog/p/17455549.html

相关文章

  • Linux 内核等待队列
    Linux内核中的等待队列是一种延时机制,其用于当前进程需要等待某些资源而进入一种sleep状态,当等待条件为真时,进程被唤醒,继续执行。显然,这里涉及三个方面,即,一是等待时当前进程处理,二是进程等待时所关注的资源处理,三时进程何时被唤醒继续执行。所以,我们这里需要几个数据结构,主要描......
  • 文件夹隐藏属性为灰色,无法修改的解决方案
    【关于U盘中毒,隐藏属性无法取消的解决办法】attrib命令:网上那些用法,看得我内分泌失调,到现在都不知道attrib的正确用法。网上找到一个批处理,很方便,可以批量设置或取消隐藏属性和系统属性。1、新建一个.txt文档2、把下面的代码复制进去3、保存4、把.txt后缀改成.bat5、不要双......
  • 2.交换机与特殊队列
    2.交换机2.1.类型1.FanoutExchange(扇形)2.DirectExchange(直连)3.TopicExchange(主题)4.HeadersExchange(头部)以下类型的交换机使用都会使用到这两个步骤①选择依赖②修改启动类2.2.FanoutExchange2.2.1.介绍FanoutExchange:扇形交换机投递到所有绑定的队列,不需要路由键,不......
  • property 用于以访问属性的方式调用函数
    property是Python内置的功能,常用来修饰类方法,用于以访问属性的方式调用函数。描述符对象为了能够实现访问属性就调用某个函数,这里将利用描述符对象作为本文的实现起点,当某个类定义了__get__方法后,通过其方法名称可以直接调用__get__proptery主要依赖于描述符的机制。p......
  • 初级数据结构--栈、队列
    栈后端(进栈)插入,后端(出栈)删除顺序存储,用静态数组实现,需要记录栈顶指针,栈的增删操作只能操作栈顶的护数据。两种初始化方式top=-1top=0共享栈两个栈共用一片内存空间,两个栈从两边向中间增长初始化1个栈顶指针初始为-1;另一个栈顶指针初始为Maxsize栈满条件 top0+1==top1队列后端(......
  • 两个栈实现队列
    @TOC一、栈和队列的基本特点栈的特点是后进先出,而队列的特点是先进先出。使用两个栈实现队列,必须具备队列的先进先出的功能。举个例子:向其中一个栈中放入4个元素,那么按照队列的特点,出队时是1先出队,所以需要把栈的所有元素全部出栈转移到空栈中。再逐一出元素。假如出栈一次后,又需......
  • Vue插值语法,文本指令,事件指令v-on,属性指令v-bind
    Vue插值语法:总结:插值语法使用{{}}传入变量,相当于形参  script中data中传入变量值,相当于实参,vue将data的值传给{{}}中html中:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scr......
  • 消息队列RocketMQ基本概念
     1消息模型(MessageModel)RocketMQ主要由Producer、Broker、Consumer三部分组成,其中Producer负责生产消息,Consumer负责消费消息,Broker负责存储消息。Broker在实际部署过程中对应一台服务器,每个Broker可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不......
  • 线程的四个属性
    如上图所示,线程有四个属性:线程ID线程名称守护线程线程优先级1.线程ID每个线程都有id,这个id不能修改线程id会不停的自增,从1开始main函数就是第一个线程,id=1id是操作系统用来识别各个线程的编号,具有唯一性,从下面java的源码中看到,这个线程的Id初始值是0,但是......
  • 剑指 Offer 09. 用两个栈实现队列
    剑指Offer09.用两个栈实现队列</br></br>题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回-1)示例1:输入:["CQueue","appendTail",......