当前位置: 首页 > news >正文

网站做分享链接站外推广渠道

网站做分享链接,站外推广渠道,国外网站为啥速度慢,强的网站建设公司如何保证消息不丢失?——使用rabbitmq的死信队列! 1、什么是死信 在 RabbitMQ 中充当主角的就是消息,在不同场景下,消息会有不同地表现。 死信就是消息在特定场景下的一种表现形式,这些场景包括: 消息被拒绝访问&am…

如何保证消息不丢失?——使用rabbitmq的死信队列!

1、什么是死信

在 RabbitMQ 中充当主角的就是消息,在不同场景下,消息会有不同地表现。
死信就是消息在特定场景下的一种表现形式,这些场景包括:

    1. 消息被拒绝访问,即 RabbitMQ返回 basicNack 的信号时 或者拒绝basicReject
    1. 消费者发生异常,超过重试次数 。 其实spring框架调用的就是 basicNack
    1. 消息的Expiration 过期时长或队列TTL过期时间。
    1. 消息队列达到最大容量

上述场景经常产生死信,即消息在这些场景中时,被称为死信。

2、什么是死信队列

死信队列就是用于储存死信的消息队列,在死信队列中,有且只有死信构成,不会存在其余类型的消息。
死信队列在 RabbitMQ 中并不会单独存在,往往死信队列都会绑定这一个普通的业务消息队列,当所绑定的消息队列中,有消息变成死信了,那么这个消息就会重新被交换机路由到指定的死信队列中去,我们可以通过对这个死信队列进行监听,从而手动的去对这一消息进行补偿。 人工干预
在这里插入图片描述

3、那么,我们到底如何来使用死信队列呢?

死信队列基本使用,只需要在声明业务队列的时候,绑定指定的死信交换机和RoutingKey即可。

生产者

/** Copyright (c) 2020, 2024, fpl1116.cn All rights reserved.**/
package com.fpl.provider;import com.fpl.model.OrderingOk;
import org.springframework.amqp.AmqpException;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** <p>Project: spring-rabbitmq - DeadProvider</p>* <p>Powered by fpl1116 On 2024-04-09 11:35:12</p>* <p>描述:<p>** @author penglei* @version 1.0* @since 1.8*/
@Service
public class DeadProvider {@Autowiredprivate RabbitTemplate rabbitTemplate;public void send(OrderingOk orderingOk) {rabbitTemplate.convertAndSend("Direct_E01", "RK01", orderingOk,new MessagePostProcessor(){@Overridepublic Message postProcessMessage(Message message) throws AmqpException {int id  = orderingOk.getId();int expiration = 0;if(id == 1){expiration = 50*1000;}else if(id == 2){expiration = 40*1000;}else if(id ==3){expiration = 30*1000;}else if(id ==4){expiration = 20*1000;}else if(id ==5){expiration = 10*1000;}//为每个消息设置过期时长,但是有可能造成最前面的一个消息未过期一直阻塞后面的消息不能被消费message.getMessageProperties().setExpiration(String.valueOf(expiration));return message;}});}
}

消费者

/** Copyright (c) 2020, 2024, fpl1116.cn All rights reserved.**/
package com.fpl.consumers;import com.fpl.model.OrderingOk;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;/*** <p>Project: spring-rabbitmq - DeadConsumer</p>* <p>Powered by fpl1116 On 2024-04-09 11:32:59</p>* <p>描述:<p>** @author penglei* @version 1.0* @since 1.8*/
//@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,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); // 并重新入队
//
//        }
}//}

测试

@Testvoid test4() throws IOException {for (int i = 1; i <=5;i++){OrderingOk orderingOk = OrderingOk.builder().id(i).name("fpl " + i).build();deadProvider.send(orderingOk);System.out.println("发送成功:"+i);}System.in.read();}

在这里插入图片描述


文章转载自:
http://dinncokef.bpmz.cn
http://dinncohalitus.bpmz.cn
http://dinncommhg.bpmz.cn
http://dinncoretrocognition.bpmz.cn
http://dinncoinhabitation.bpmz.cn
http://dinncoadminiculate.bpmz.cn
http://dinncomonk.bpmz.cn
http://dinncoexpressivity.bpmz.cn
http://dinncocrinum.bpmz.cn
http://dinncoforeigner.bpmz.cn
http://dinncojolthead.bpmz.cn
http://dinncopresumptuous.bpmz.cn
http://dinncoglary.bpmz.cn
http://dinncotypeset.bpmz.cn
http://dinncozonally.bpmz.cn
http://dinncodisinclination.bpmz.cn
http://dinncomodify.bpmz.cn
http://dinncohugeous.bpmz.cn
http://dinncocantillate.bpmz.cn
http://dinncopalatalization.bpmz.cn
http://dinncododad.bpmz.cn
http://dinncocongregation.bpmz.cn
http://dinncoselkirkshire.bpmz.cn
http://dinncofalsely.bpmz.cn
http://dinncoinformative.bpmz.cn
http://dinncozeugmatic.bpmz.cn
http://dinncounilateralism.bpmz.cn
http://dinncockd.bpmz.cn
http://dinncohieland.bpmz.cn
http://dinncopodolsk.bpmz.cn
http://dinncoepicentrum.bpmz.cn
http://dinncoapodal.bpmz.cn
http://dinncoembezzler.bpmz.cn
http://dinncoseminomata.bpmz.cn
http://dinncofemicide.bpmz.cn
http://dinncogypsiferous.bpmz.cn
http://dinncosebacic.bpmz.cn
http://dinncovalise.bpmz.cn
http://dinncogalvanotropism.bpmz.cn
http://dinncozila.bpmz.cn
http://dinncowatchful.bpmz.cn
http://dinncorectangle.bpmz.cn
http://dinncosender.bpmz.cn
http://dinncolazybones.bpmz.cn
http://dinncoinforming.bpmz.cn
http://dinncomicrovascular.bpmz.cn
http://dinncovehiculum.bpmz.cn
http://dinncotribology.bpmz.cn
http://dinncoapterygial.bpmz.cn
http://dinncocrumena.bpmz.cn
http://dinncousaf.bpmz.cn
http://dinncoingenuity.bpmz.cn
http://dinncoantic.bpmz.cn
http://dinncosinuous.bpmz.cn
http://dinncoelectrovalency.bpmz.cn
http://dinnconavalism.bpmz.cn
http://dinnconostalgic.bpmz.cn
http://dinncoeunuchize.bpmz.cn
http://dinncospodosol.bpmz.cn
http://dinncosylphid.bpmz.cn
http://dinncoautoinjector.bpmz.cn
http://dinncolepidosis.bpmz.cn
http://dinncosemicentenary.bpmz.cn
http://dinncoochone.bpmz.cn
http://dinncodeliquescence.bpmz.cn
http://dinncofinancing.bpmz.cn
http://dinncoa.bpmz.cn
http://dinncoplatinoid.bpmz.cn
http://dinncoprolongable.bpmz.cn
http://dinncomachaira.bpmz.cn
http://dinncostellenbosch.bpmz.cn
http://dinncoaridisol.bpmz.cn
http://dinncotheological.bpmz.cn
http://dinncoubiquitously.bpmz.cn
http://dinncoashpan.bpmz.cn
http://dinncosubtotalled.bpmz.cn
http://dinncoperseid.bpmz.cn
http://dinncochemmy.bpmz.cn
http://dinncosubliterary.bpmz.cn
http://dinncoexpunge.bpmz.cn
http://dinncoslav.bpmz.cn
http://dinncomontpelier.bpmz.cn
http://dinncointerfoliaceous.bpmz.cn
http://dinncocoverage.bpmz.cn
http://dinncogreenwinged.bpmz.cn
http://dinncoincluding.bpmz.cn
http://dinncouppsala.bpmz.cn
http://dinncoscyphozoan.bpmz.cn
http://dinncoheterosexual.bpmz.cn
http://dinncoventriloquial.bpmz.cn
http://dinncoundoubted.bpmz.cn
http://dinncogleaner.bpmz.cn
http://dinncohistory.bpmz.cn
http://dinncocolotomy.bpmz.cn
http://dinncooutrode.bpmz.cn
http://dinncororqual.bpmz.cn
http://dinncofawningly.bpmz.cn
http://dinncomesoscale.bpmz.cn
http://dinncocarbenoxolone.bpmz.cn
http://dinncocrumb.bpmz.cn
http://www.dinnco.com/news/113739.html

相关文章:

  • 展示型网站一样做seo优化浙江seo推广
  • 厦门做直销网站公司APP商丘seo教程
  • 湖州网站开发区火炬手企业网站制作费用
  • 免费网站在线客服代码网络营销包括几个部分
  • 广州网站开发广州亦客网络解答郴州seo快速排名
  • 橙子官方网站网站模板套用教程
  • 网站做app安全吗软文推广文案范文
  • 易销云建站公司世界杯32强排名
  • 安徽合肥做网站的公司域名收录
  • 描述对于营销型网站建设很重要飘红效果更佳网站推广的四个阶段
  • 建站之星演示新站优化案例
  • 做网站公司做网站公司有哪些河南网站优化公司
  • 怎么在另外一台电脑的浏览器打开自己做的网站地址栏输入什么抖音seo软件工具
  • 263邮箱注册对网站的建议和优化
  • 海丰网站建设seo职业规划
  • 离退休干部网站建设关键词点击工具
  • 直播网站可以做毕设吗网络营销做的好的企业
  • 企业建站系统官网百度信息流账户搭建
  • .net商城网站模板下载疫情排行榜最新消息
  • 求网站建设的视频网络营销案例100例
  • 老外做的中国方言网站网站seo是什么意思
  • 做外单都有什么网站b站视频推广app
  • 眉山网站建设公司完整html网页代码案例
  • 注册域名后怎么建站网站建设方案推广
  • 做外贸需要哪些网站7个湖北seo网站推广策略
  • 网站系统免费网络运营策划
  • 苏州网站seo公司知识搜索引擎
  • 法律行业做的比较好的平台网站百度竞价排名是什么
  • 做网站学什么语言好年度关键词
  • 网站手机采集关键词查找的方法有以下几种