代码编织梦想

  1. 那什么消息是死信(dead message)呢?

  1. 被拒绝(basic.reject或basic.nack)并且requeue=false的消息

  1. TTL过期消息的消息

  1. 队列达到最大长度(队列满了,无法再添加数据到mq中)的消息

  1. DLX(Dead Letter Exchanges)死信队列,本身也是一个普通的消息队列,在创建队列的时候,通过设置一些关键参数x-dead-letter-exchange,可以将一个普通的消息队列设置为死信队列

  1. 当这个队列中有死信时, RabbitMQ就会自动将这个消息重新发布到设置的Exchange上去, 进而被路由到另一个队列

 package com.qiyexue.api.dlx;
 
 import com.rabbitmq.client.Channel;
 import com.rabbitmq.client.Connection;
 import com.rabbitmq.client.ConnectionFactory;
 
 import java.util.HashMap;
 import java.util.Map;
 
 /**
  * 消费者
  *
  * @author 七夜雪
  * @date 2018-12-15 20:07
  */
 public class Consumer {
 
     public static void main(String[] args) throws Exception {
         // 1. 创建连接工厂并设置属性
         ConnectionFactory factory = new ConnectionFactory();;
         factory.setHost("192.168.72.138");
         factory.setPort(5672);
         factory.setVirtualHost("/");
 
         // 2. 创建连接
         Connection connection = factory.newConnection();
 
         // 3. 创建channel
         Channel channel = connection.createChannel();
 
         // 4. 声明死信队列Exchange和Queue
         channel.exchangeDeclare("dlx.exchange", "topic");
         channel.queueDeclare("dlx.queue", true, false, false, null);
         channel.queueBind("dlx.queue", "dlx.exchange", "#");
 
         // 5. 声明普通Exchange
         String exchangeName = "test_dlx_exchange";
         String exchangeType = "topic";
         String routingKey = "dlx.*";
         channel.exchangeDeclare(exchangeName, exchangeType, true, false, null);
 
         // 6. 声明消息队列, 指定死信队列为dlx.exchange
         String queueName = "test_dlx_queue";
         Map<String, Object> arguments = new HashMap<>();
         // x-dead-leeter-exchange属性用于指定死信队列为dlx.exchange
         arguments.put("x-dead-letter-exchange", "dlx.exchange");
         channel.queueDeclare(queueName, true, false, false, arguments);
 
         // 6. 绑定队列和Exchange
         channel.queueBind(queueName, exchangeName, routingKey);
 
    }
 
 }
 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_58696871/article/details/129198256

消息队列之 rabbitmq_huangyaa729的博客-爱代码爱编程

关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时候把这块的知识整理记录一下了。 市面上的消息队列产品有很多,比如老牌的 ActiveMQ、RabbitMQ ,

理解RabbitMQ中的AMQP-0-9-1模型-爱代码爱编程

前提 之前有个打算在学习RabbitMQ之前,把AMQP详细阅读一次,挑出里面的重点内容。后来找了下RabbitMQ的官方文档,发现了有一篇文档专门介绍了RabbitMQ中实现的AMQP模型部分,于是直接基于此文档和个人理解写下这篇文章。 AMQP协议 AMQP全称是Advanced Message Queuing Protocol,它是一个(分布式

RabbitMQ-爱代码爱编程

消息队列的主要作用是什么? 解耦 将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统不需要做任何修改。 异步 将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度 削峰 系统慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的 你项目好好的情况下,为什么要引入消息队列? 引入的理由

RabbitMQ几种工作模式,实现延时消息的两种案例-爱代码爱编程

点击上方蓝色字体,选择“标星公众号” 优质文章,第一时间送达 1、死信队列 1.1消息什么时候变为死信(dead-letter) 消息被否定接收,消费者使用basic.reject 或者 basic.nack并且requeue 重回队列属性设为false。消息在队列里得时间超过了该消息设置的过期时间(TTL)。消息队列到达了它的最大长度,

【064期】面试官问:RabbitMQ 本身不支持延迟队列,那么如何实现?-爱代码爱编程

>>号外:关注“Java精选”公众号,回复“面试资料”,免费领取资料!“Java精选面试题”小程序,3000+ 道面试题在线刷,最新、最全 Java 面试题! RabbitMQ本身没有延迟队列的支持,但是基于其本身的一些特性,可以做到类似延迟队列的效果:基于死信交换器+TTL。 以下介绍下相关概念及方法 Dead Letter

消息队列可靠性和顺序性消费-爱代码爱编程

文章目录 如何保证消息不被重复消费?如何保证消费的可靠性传输?消息不丢失?kafka :rabbitMQ:如何保证消息顺序rabbitMQkafka有序谈谈rabbitMQ的了解?rabbitMQ集群模式谈谈kafka理解kafka性能kafka如何从头开始消费topic的全量数据选型为什么选择使用rabbitMq?为什么没有使用rocketMQ?

阿里力推双q:rabbitmq与rocketmq,电子版手绘脑图+学习指南+面试,你知道多少?_m0_55849656的博客-爱代码爱编程

先来谈谈RabbitMQ 附面试思维导图:   不多说,上一份我手绘的RabbitMQ思维脑图,先来总体的梳理一下各知识点 手绘的RabbitMQ思维脑图 额,这个手绘电子版的RabbitMQ知识大纲,有点不太好展示,截图可以看见里面的内容比较多,可能看不清楚,等下后面会细说一下 说到RabbitMQ,其实它已是目前非常热

如何快速理解rabbitmq_心疼你了的博客-爱代码爱编程

rabbitMQ的基本概念: broker:在集群环境下 每一个rabbitMQ服务器叫 broker exchange:交换机,消息的路由器,可以根据规则把消息路由到不同的队列 binding:绑定,把交换机和队列进行绑定 queue:队列,消息真正存储的地方 routingkey:路由键,key,交换机根据它 进行消息路由。路由的规则。 p

厚积薄发:rabbitmq与rocketmq(电子版手绘脑图+学习指南+面试技巧)_程序员不想睡觉的博客-爱代码爱编程

首先来谈谈RabbitMQ 不多说,上一份我手绘的RabbitMQ思维脑图,先来总体的梳理一下各知识点 手绘的RabbitMQ思维脑图 额,这个手绘电子版的RabbitMQ知识大纲,有点不太好展示,截图可以看见里面的内容比较多,可能看不清楚,等下后面会细说一下 说到RabbitMQ,其实它已是目前非常热门的一款消息中间件,不管是互联网

rabbitmq之死信队列_悠然予夏的博客-爱代码爱编程

用户下单,调用订单服务,然后订单服务调用派单系统通知外卖人员送单,这时候订单系统与派单系统 采用 MQ异步通讯。在定义业务队列时可以考虑指定一个 死信交换机,并绑定一个死信队列。当消息变成死信时,该消息就会被发送到该死信队列上,这样方便我们查看消息失败的原因。DLX,全称为Dead-Letter-Exchange,死信交换器。消息在一个队列中变成死信(De

rabbitmq面试题-爱代码爱编程

什么是 MQ MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已。 还是一种跨进程的通信机制,用于上下游传递消息。 在互联网架构中,MQ 是

一文入门rabbitmq消息队列-爱代码爱编程

本文是基于B站-黑马程序员发布的RabbitMQ教程所记录(高级部分后续补上),仅供学习参考,如果需要更详细的文档,请移步官网哦 1、MQ基本概念 1、概述 MQ全称Message Queue(消息队列),是

java 内部类-爱代码爱编程

目录​​​​​​​ 1. 内部类概述 2. 成员内部类 3. 局部内部类 4. 匿名内部类 1. 内部类概述 内部类,就是在 A 类中定义一个 B 类,那么类 B 就被称为内部类。 public class Outer { public class Inner{ } } public class Oute

(三十九)undo log版本链是个什么东西?-爱代码爱编程

今天我们正式开始切入讲解MySQL中多个事务并发执行时的隔离到底是怎么做的,因为我们知道默认是骚气的RR隔离级别,也就是说脏写、脏读、不可重复读、幻读,都不会发生,每个事务执行的时候,跟别的事务压根儿就没关系,甭管你别的事务