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

网站服务器地址在哪里看定制微信小程序价格

网站服务器地址在哪里看,定制微信小程序价格,辽宁建设工程信息网a类业绩,平阳网站建设公司目录 一、死信队列介绍 1.死信 2.死信的来源 2.1 TTL 2.2 死信的来源 3.死信队列 4.死信队列的用途 二、死信队列的实现 1.导入依赖 pom.xml 2.application.properties 3.配置类 4.生产者 5.业务消费者(正常消费者) 6.死信队列消费者 一、…

目录

一、死信队列介绍

1.死信

2.死信的来源

2.1 TTL

2.2 死信的来源

3.死信队列 

4.死信队列的用途

二、死信队列的实现

1.导入依赖 pom.xml

2.application.properties

3.配置类

4.生产者

5.业务消费者(正常消费者)

6.死信队列消费者


一、死信队列介绍

1.死信

        死信顾名思义就是没办法被消费的消息;

2.死信的来源

2.1 TTL

        什么是TTL?

        TTL(Time To Live)翻译为生存时间,是指消息在队列中可以存活的时间,如果消息在队列中存活的时间超过了TTL,那么消息就会被标记为死信,然后进入死信队列;

2.2 死信的来源

  • 消息TTL过期;
  •  队列达到最大长度: 队列满了无法再添加消息,就会成为死信,然后进入死信队列;
  • 消息被拒绝,比如我们设置了消息的应答模式为手动应但是没有调用ack方法,那么消息就会被标记为死信,然后进入死信队列;

3.死信队列 

        我们能了解到,消息生产者生产消息,消费者消费(处理消息),消息生产者发送消息到队列,消费者从队列中获取消息,某些消息会无法被消费就会成为死信,自然而然的,我们需要一个队列来存储死信,而这个队列就被成为死信队列;

4.死信队列的用途

首先呢一个事物能够存在就说明他有存在的理由,死信队列其实一般来做一个定时的作用 例如:

  • 在保证订单业务中的消息数据不丢失,当消息没有被处理或者是超出了TTL时间,那么我们就可以将他放在死信队列中,然后定时去消费死信队列中的消息,然后进行相应的处理;
  • 如果这个消息是被动的,就是说我们想让他被消费但是没有被消费那么其实就是保证了消息的不丢失;
  • 如果是一个主动的,我们设置了我们需要的TTL,那么就可以成为一个定时功能。比如取消支付功能;

1.2.1 延迟队列:

如果是这个消息使我们故意的想让发到死信队列中,其实我们可以将他叫做为延时队列,我们可以设置一个时间,比如我们想让这个消息延迟10分钟再发送到死信队列中,那么我们就可以将这个消息发送到延迟队列中,然后定时去消费延迟队列中的消息,然后进行相应的处理;

二、死信队列的实现

1.导入依赖 pom.xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit-test</artifactId><scope>test</scope></dependency>
</dependencies>

2.application.properties

spring.application.name=springboot-rabbitmq
server.port=8080
#默认地址就是127.0.0.1:5672,如果是服务器的rabbitmq就改下
spring.rabbitmq.host=192.168.174.130
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
spring.rabbitmq.listener.type=simple
#设置为false,会丢弃消息或者重新发步到死信队列
spring.rabbitmq.listener.simple.default-requeue-rejected=false
#手动签收
spring.rabbitmq.listener.simple.acknowledge-mode=manual
#虚拟主机目录
spring.rabbitmq.virtual-host=/

3.配置类

@Configuration
public class rabbitMQConf {//普通交换机的名字public static final String NORMAL_EXCHANGE = "normalExchange";//普通队列的名字public static final String NORMAL_QUEUE = "normalQueue";//死信交换机的名字public static final String DEAD_EXCHANGE = "deadExchange";//死信队列的名字public static final String DEAD_QUEUE = "deadQueue";/*** 普通交换机*/@Beanpublic DirectExchange normalExchange() {return new DirectExchange(NORMAL_EXCHANGE);}/*普通队列*/@Beanpublic Queue normalQueue() {return new Queue(NORMAL_QUEUE);}/*** 死信交换机 死信队列*/@Beanpublic DirectExchange deadExchange() {return new DirectExchange(DEAD_EXCHANGE);}/*** 死信队列*/@Beanpublic Queue deadQueue() {return new Queue(DEAD_QUEUE);}/*** 绑定正常队列*/@Beanpublic Binding normalBinding() {return BindingBuilder.bind(normalQueue()).to(normalExchange()).with("normal");}/*** 死信队列绑定* @return*/@Beanpublic Binding deadBinding() {return BindingBuilder.bind(deadQueue()).to(deadExchange()).with("dead");}
}

4.生产者

@Slf4j
@RestController
@RequestMapping("/test")
public class SendMessageController {@Autowiredprivate RabbitTemplate rabbitTemplate;@GetMapping("/sendMsg/{msg}")public String sendMsg(@PathVariable(value = "msg") String msg) {log.info("send msg:" + msg);rabbitTemplate.convertAndSend(NORMAL_EXCHANGE, "normal", msg);return "success";}
}

5.业务消费者(正常消费者)

@Service
@Slf4j
public class NormalMessageReceiver {/*** 消费消息*/@RabbitListener(queues = NORMAL_QUEUE)@SneakyThrowspublic void receive(Message msg, Channel channel) {String s = msg.getBody().toString();String s1 = new String(msg.getBody());log.info("这个是toString方式得出来的s:{}", s);log.info("这个是new String方式得出来的s:{}", s1);boolean ack=true;Exception exception=null;try {if (s1.contains("dead")){throw new RuntimeException("dead letter exception");}} catch (RuntimeException e) {ack=false;exception=e;}if (!ack){System.out.println("error msg{ }"+exception.getMessage());//设置死信消息channel.basicNack(msg.getMessageProperties().getDeliveryTag(),false,false);}else {channel.basicAck(msg.getMessageProperties().getDeliveryTag(),false);}System.out.println("正常消息消费者收到消息:" + msg);}
}

6.死信队列消费者

@Component
public class DeadMessageReceiver {/*** 死信队列*/@RabbitListener(queues = rabbitMQConf.DEAD_QUEUE)public void receiveA(Message message, Channel channel) throws IOException {System.out.println("DeadMessageA{}" + new String(message.getBody()));channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);}
}

http://www.yayakq.cn/news/596853/

相关文章:

  • 深圳深圳做网站wordpress怎么装修网页
  • 公司建设网站的意义wordpress文章摘要字数
  • 做旧工艺品网站统计后台网站有哪些
  • 电子商务网站中的信息技术阿里巴巴我要注册邮箱
  • 常州网站制作价格wordpress主题 破解主题下载
  • 银河星宇 网站建设连锁销售网站制作
  • 佛山外贸网站建设资讯沙田镇网站仿做
  • 顺企网赣州网站建设零下一度网站建设
  • 前端做网站一般用什么框架国外包装设计网
  • 云南做网站价格wordpress怎么修改关键字
  • 秦皇岛网站制作定制快速网站排名汉狮公司
  • 泉州网站建设 推广男女做暧暧观看免费网站
  • 南阳网站建设报价wordpress 330
  • 网站首页title怎么修改从零开始做网站数据库
  • 附近手机网站建设网站没有做实名认证
  • 安丘网站建设报价app开发公司资质
  • 网站建设要注意那些问题.net网站做增删改
  • 重庆市建设工程质量协会网站ui设计专业是什么
  • 做好网站建设工作总结wordpress阿里百秀模板下载
  • 做网站范本微信借口的网站怎么做
  • 租房网站模板网页设计改版
  • 开封网站建设哪家好做网站需要企业
  • 网站开发需要2个月吗开发电商平台多少钱
  • 做网站外包的公司好干嘛网站开发与设计总结
  • 婚礼网站建设网页浏览器怎么卸载
  • 网站原创内容wordpress用户组名称
  • 沈阳核工业建设工程总公司网站intitle:郑州网站建设
  • 织梦网站评论后"提示验证码错误请点击验证码图片更新验证码外贸稳中提质韧性强
  • 学校网站建设策划方案微信里面小程序
  • 做黑彩网站能赚钱吗绿色学校网站模板