中企动力网站建设 长春,佛山企业网站建设机构,专门做玉的网站,网页链接怎么打开目录
一、什么是死信 二、什么是死信队列
编辑 三、第一种情景#xff1a;消息被拒绝时
四、第二种场景#xff1a;. 消费者发生异常#xff0c;超过重试次数 。 其实spring框架调用的就是 basicNack
五、第三种场景#xff1a; 消息的Expiration 过期时长或队列TTL…目录
一、什么是死信 二、什么是死信队列
编辑 三、第一种情景消息被拒绝时
四、第二种场景. 消费者发生异常超过重试次数 。 其实spring框架调用的就是 basicNack
五、第三种场景 消息的Expiration 过期时长或队列TTL过期时间。
六、 第四种情景 消息队列达到最大容量 一、什么是死信 在RabbitMQ 中充当主角的就是消息在不同场景下消息会有不同地表现。
死信就是消息在特定场景下的一种表现形式这些场景包括 1. 消息被拒绝访问即 RabbitMQ返回 basicNack 的信号时 或者拒绝basicReject 2. 消费者发生异常超过重试次数 。 其实spring框架调用的就是 basicNack 3. 消息的Expiration 过期时长或队列TTL过期时间。 4. 消息队列达到最大容量 上述场景经常产生死信即消息在这些场景中时被称为死信。 二、什么是死信队列 死信队列就是用于储存死信的消息队列在死信队列中有且只有死信构成不会存在其余类型的消息。 死信队列在 RabbitMQ 中并不会单独存在往往死信队列都会绑定这一个普通的业务消息队列当所绑定的消息队列中有消息变成死信了那么这个消息就会重新被交换机路由到指定的死信队列中去我们可以通过对这个死信队列进行监听从而手动的去对这一消息进行补偿。 人工干预 三、第一种情景消息被拒绝时
#设置消费者手动应答模式
spring.rabbitmq.listener.simple.acknowledge-mode manual package com.by.consumer;import com.by.model.OrderingOk;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.io.IOException;Configuration
Slf4j
public class DeadConsumer {//死信交换机Beanpublic DirectExchange deadExchange() {return ExchangeBuilder.directExchange(Dead_E01).build();}//死信队列Beanpublic Queue deadQueue1() {return QueueBuilder.durable(Dead_Q01).build();}//死信交换机与死信队列的绑定Beanpublic Binding deadBinding1(Queue deadQueue1, DirectExchange deadExchange) {return BindingBuilder.bind(deadQueue1).to(deadExchange).with(RK_DEAD);}//业务队列Beanpublic Queue queue1() {return QueueBuilder.durable(Direct_Q01).deadLetterExchange(Dead_E01).deadLetterRoutingKey(RK_DEAD)//.ttl(10*1000) //该属性是队列的属性设置消息的过期时间消息在队列里面停留时间n毫秒后就会把这个消息投递到死信交换机针对的是所有的消息//.maxLength(20) //设置队列存放消息的最大个数x-max-length属性值当队列里面消息超过20会把队列之前的消息依次放进死信队列.build();}//业务交换机Beanpublic DirectExchange exchange() {return ExchangeBuilder.directExchange(Direct_E01).build();}//业务交换机与队列的绑定Beanpublic Binding binding1(Queue queue1, DirectExchange exchange) {return BindingBuilder.bind(queue1).to(exchange).with(RK01);}//RabbitListener(queues Direct_Q01)
// public void receiveMessage(OrderingOk msg) {
// log.info(消费者1 收到消息 msg );
// int i 5/0;
// }RabbitListener(queues Direct_Q01)public void receiveMessage(OrderingOk msg, Message message, Channel channel) throws IOException {long deliveryTag message.getMessageProperties().getDeliveryTag();System.out.println(消费者1 收到消息 msg tag: deliveryTag);channel.basicReject(deliveryTag, false);
// try {
// // 处理消息...
// int i 5/0;
// // 如果处理成功手动发送ack确认 ,Yes
// channel.basicAck(deliveryTag, false);
// } catch (Exception e) {
// // 处理失败可以选择重试或拒绝消息basicNack或basicReject NO
// channel.basicNack(deliveryTag, false, false); // 并重新入队
//
// }}
}四、第二种场景. 消费者发生异常超过重试次数 。 其实spring框架调用的就是 basicNack
一般要和自动重启一起使用否则死信队列收不到消息
#设置消费者自动应答模式
spring.rabbitmq.listener.simple.acknowledge-mode auto
#开启自动应答重试机制
spring.rabbitmq.listener.simple.retry.enabledtrue package com.by.consumer;import com.by.model.OrderingOk;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.io.IOException;Configuration
Slf4j
public class DeadConsumer {//死信交换机Beanpublic DirectExchange deadExchange() {return ExchangeBuilder.directExchange(Dead_E01).build();}//死信队列Beanpublic Queue deadQueue1() {return QueueBuilder.durable(Dead_Q01).build();}//死信交换机与死信队列的绑定Beanpublic Binding deadBinding1(Queue deadQueue1, DirectExchange deadExchange) {return BindingBuilder.bind(deadQueue1).to(deadExchange).with(RK_DEAD);}//业务队列Beanpublic Queue queue1() {return QueueBuilder.durable(Direct_Q01).deadLetterExchange(Dead_E01).deadLetterRoutingKey(RK_DEAD)//.ttl(10*1000) //该属性是队列的属性设置消息的过期时间消息在队列里面停留时间n毫秒后就会把这个消息投递到死信交换机针对的是所有的消息//.maxLength(20) //设置队列存放消息的最大个数x-max-length属性值当队列里面消息超过20会把队列之前的消息依次放进死信队列.build();}//业务交换机Beanpublic DirectExchange exchange() {return ExchangeBuilder.directExchange(Direct_E01).build();}//业务交换机与队列的绑定Beanpublic Binding binding1(Queue queue1, DirectExchange exchange) {return BindingBuilder.bind(queue1).to(exchange).with(RK01);}//RabbitListener(queues Direct_Q01)
// public void receiveMessage(OrderingOk msg) {
// log.info(消费者1 收到消息 msg );
// int i 5/0;
// }RabbitListener(queues Direct_Q01)public void receiveMessage(OrderingOk msg, Message message, Channel channel) throws IOException {long deliveryTag message.getMessageProperties().getDeliveryTag();System.out.println(消费者1 收到消息 msg tag: deliveryTag);int a10/0;
// channel.basicReject(deliveryTag, false);
// try {
// // 处理消息...
// int i 5/0;
// // 如果处理成功手动发送ack确认 ,Yes
// channel.basicAck(deliveryTag, false);
// } catch (Exception e) {
// // 处理失败可以选择重试或拒绝消息basicNack或basicReject NO
// channel.basicNack(deliveryTag, false, false); // 并重新入队
//
// }}
}五、第三种场景 消息的Expiration 过期时长或队列TTL过期时间。 //业务队列Beanpublic Queue queue1() {return QueueBuilder.durable(Direct_Q01).deadLetterExchange(Dead_E01).deadLetterRoutingKey(RK_DEAD).ttl(10*1000) //该属性是队列的属性设置消息的过期时间消息在队列里面停留时间n毫秒后就会把这个消息投递到死信交换机针对的是所有的消息//.maxLength(20) //设置队列存放消息的最大个数x-max-length属性值当队列里面消息超过20会把队列之前的消息依次放进死信队列.build();} 六、 第四种情景 消息队列达到最大容量 //业务队列Beanpublic Queue queue1() {return QueueBuilder.durable(Direct_Q01).deadLetterExchange(Dead_E01).deadLetterRoutingKey(RK_DEAD)
// .ttl(10*1000) //该属性是队列的属性设置消息的过期时间消息在队列里面停留时间n毫秒后就会把这个消息投递到死信交换机针对的是所有的消息.maxLength(5) //设置队列存放消息的最大个数x-max-length属性值当队列里面消息超过5会把队列之前的消息依次放进死信队列.build();} /*** 测试直联交换机** throws IOException* throws InterruptedException*/Testvoid contextLoads() throws IOException, InterruptedException {for (int i 0; i 8; i) {OrderingOk orderingOk OrderingOk.builder().id(1).name(张三i).build();directProvide.send(orderingOk);}System.in.read();}
id为123的被装进了死信队列因为数据太老业务队列优先要新的数据
文章转载自: http://www.morning.fpkpz.cn.gov.cn.fpkpz.cn http://www.morning.yqkxr.cn.gov.cn.yqkxr.cn http://www.morning.gfpyy.cn.gov.cn.gfpyy.cn http://www.morning.nqpy.cn.gov.cn.nqpy.cn http://www.morning.fhbhr.cn.gov.cn.fhbhr.cn http://www.morning.ymhzd.cn.gov.cn.ymhzd.cn http://www.morning.pmdnx.cn.gov.cn.pmdnx.cn http://www.morning.hbtarq.com.gov.cn.hbtarq.com http://www.morning.pfmsh.cn.gov.cn.pfmsh.cn http://www.morning.xqzrg.cn.gov.cn.xqzrg.cn http://www.morning.ykwbx.cn.gov.cn.ykwbx.cn http://www.morning.drkk.cn.gov.cn.drkk.cn http://www.morning.dpfr.cn.gov.cn.dpfr.cn http://www.morning.shyqcgw.cn.gov.cn.shyqcgw.cn http://www.morning.tzzxs.cn.gov.cn.tzzxs.cn http://www.morning.hqqpy.cn.gov.cn.hqqpy.cn http://www.morning.thwhn.cn.gov.cn.thwhn.cn http://www.morning.rykmz.cn.gov.cn.rykmz.cn http://www.morning.pdwny.cn.gov.cn.pdwny.cn http://www.morning.bgkk.cn.gov.cn.bgkk.cn http://www.morning.kwjyt.cn.gov.cn.kwjyt.cn http://www.morning.jgrjj.cn.gov.cn.jgrjj.cn http://www.morning.nmbbt.cn.gov.cn.nmbbt.cn http://www.morning.rtlrz.cn.gov.cn.rtlrz.cn http://www.morning.rywr.cn.gov.cn.rywr.cn http://www.morning.rwyw.cn.gov.cn.rwyw.cn http://www.morning.kjrlp.cn.gov.cn.kjrlp.cn http://www.morning.jnbsx.cn.gov.cn.jnbsx.cn http://www.morning.yqkxr.cn.gov.cn.yqkxr.cn http://www.morning.mdwlg.cn.gov.cn.mdwlg.cn http://www.morning.yqpck.cn.gov.cn.yqpck.cn http://www.morning.qxnlc.cn.gov.cn.qxnlc.cn http://www.morning.lxyyp.cn.gov.cn.lxyyp.cn http://www.morning.qkgwx.cn.gov.cn.qkgwx.cn http://www.morning.sfmqm.cn.gov.cn.sfmqm.cn http://www.morning.yqwrj.cn.gov.cn.yqwrj.cn http://www.morning.wnpps.cn.gov.cn.wnpps.cn http://www.morning.yfzld.cn.gov.cn.yfzld.cn http://www.morning.sfmqm.cn.gov.cn.sfmqm.cn http://www.morning.cyhlq.cn.gov.cn.cyhlq.cn http://www.morning.ypdhl.cn.gov.cn.ypdhl.cn http://www.morning.pylpd.cn.gov.cn.pylpd.cn http://www.morning.wflsk.cn.gov.cn.wflsk.cn http://www.morning.tqqfj.cn.gov.cn.tqqfj.cn http://www.morning.bzlgb.cn.gov.cn.bzlgb.cn http://www.morning.kyzja.com.gov.cn.kyzja.com http://www.morning.yfpnl.cn.gov.cn.yfpnl.cn http://www.morning.trbxt.cn.gov.cn.trbxt.cn http://www.morning.wqgr.cn.gov.cn.wqgr.cn http://www.morning.jbxmb.cn.gov.cn.jbxmb.cn http://www.morning.tfbpz.cn.gov.cn.tfbpz.cn http://www.morning.gmztd.cn.gov.cn.gmztd.cn http://www.morning.jnbsx.cn.gov.cn.jnbsx.cn http://www.morning.cpqwb.cn.gov.cn.cpqwb.cn http://www.morning.bpmdh.cn.gov.cn.bpmdh.cn http://www.morning.hhzdj.cn.gov.cn.hhzdj.cn http://www.morning.dqxph.cn.gov.cn.dqxph.cn http://www.morning.qpmmg.cn.gov.cn.qpmmg.cn http://www.morning.qnyf.cn.gov.cn.qnyf.cn http://www.morning.jmbgl.cn.gov.cn.jmbgl.cn http://www.morning.kdlzz.cn.gov.cn.kdlzz.cn http://www.morning.hkng.cn.gov.cn.hkng.cn http://www.morning.ccyjt.cn.gov.cn.ccyjt.cn http://www.morning.xstfp.cn.gov.cn.xstfp.cn http://www.morning.pdtjj.cn.gov.cn.pdtjj.cn http://www.morning.nkddq.cn.gov.cn.nkddq.cn http://www.morning.kfjnx.cn.gov.cn.kfjnx.cn http://www.morning.dkqbc.cn.gov.cn.dkqbc.cn http://www.morning.tmfm.cn.gov.cn.tmfm.cn http://www.morning.gkmwx.cn.gov.cn.gkmwx.cn http://www.morning.ndpwg.cn.gov.cn.ndpwg.cn http://www.morning.gkmwx.cn.gov.cn.gkmwx.cn http://www.morning.qxgmp.cn.gov.cn.qxgmp.cn http://www.morning.ayftwl.cn.gov.cn.ayftwl.cn http://www.morning.dpmkn.cn.gov.cn.dpmkn.cn http://www.morning.dfygx.cn.gov.cn.dfygx.cn http://www.morning.snnb.cn.gov.cn.snnb.cn http://www.morning.fbylq.cn.gov.cn.fbylq.cn http://www.morning.cnprt.cn.gov.cn.cnprt.cn http://www.morning.hqwtm.cn.gov.cn.hqwtm.cn