国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RabbitMQ——死信隊(duì)列

這篇具有很好參考價(jià)值的文章主要介紹了RabbitMQ——死信隊(duì)列。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

RabbitMQ——死信隊(duì)列

死信隊(duì)列(Dead Letter Queue,DLQ)是 RabbitMQ 中的一種重要特性,用于處理無(wú)法被消費(fèi)的消息,防止消息丟失。

死信的來(lái)源

在消息隊(duì)列中,當(dāng)消息滿足一定條件而無(wú)法被正常消費(fèi)時(shí),這些消息會(huì)被發(fā)送到死信隊(duì)列。滿足條件的情況包括但不限于:

  • 消息被拒絕(basic.rejectbasic.nack)且不重新入隊(duì)(requeue 參數(shù)為 false)。
  • 消息過(guò)期(TTL,Time-To-Live)。
  • 隊(duì)列長(zhǎng)度超過(guò)限制,無(wú)法再添加數(shù)據(jù)到mq中。

生產(chǎn)者

package com.weipch.rabbitmq.dlq;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.GetResponse;
import com.weipch.util.RabbitMqUtils;

/**
 * @Author 方唐鏡
 * @Create 2024-03-03 14:08
 * @Description
 */
public class Produce {


	private static final String NORMAL_EXCHANGE = "normal_exchange";


	public static void main(String[] args) throws Exception {
		Channel channel = RabbitMqUtils.getChannel();
        //模擬消息過(guò)期 10s
		//AMQP.BasicProperties properties = new AMQP.BasicProperties().builder().expiration("10000").build();
		for (int i = 0; i < 10; i++) {
			String message = "hello world" + i;
			channel.basicPublish(NORMAL_EXCHANGE, "normal-routing-key", null, message.getBytes());
		}
	}
}

消費(fèi)者

正常隊(duì)列:

package com.weipch.rabbitmq.dlq;

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;
import com.weipch.util.RabbitMqUtils;

import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author 方唐鏡
 * @Create 2024-03-03 13:50
 * @Description
 */
public class Consumer01 {


	private static final String NORMAL_EXCHANGE = "normal_exchange";
	private static final String DEAD_EXCHANGE = "dead_exchange";

	private static final String NORMAL_QUEUE = "normal_queue";
	private static final String DEAD_QUEUE = "dead_queue";


	public static void main(String[] args) throws Exception {
		Channel channel = RabbitMqUtils.getChannel();
		//聲明死信交換機(jī)和隊(duì)列
		channel.exchangeDeclare(DEAD_EXCHANGE, BuiltinExchangeType.DIRECT);
		channel.queueDeclare(DEAD_QUEUE, false, false, false, null);
		//綁定
		channel.queueBind(DEAD_QUEUE, DEAD_EXCHANGE, "dead-routing-key");


		//聲明普通交換機(jī)和隊(duì)列
		channel.exchangeDeclare(NORMAL_EXCHANGE, BuiltinExchangeType.DIRECT);
		//在正常隊(duì)列中設(shè)置死信參數(shù) 指定死信交換機(jī)和死信路由鍵
		Map<String, Object> map = new HashMap<>();
		map.put("x-dead-letter-exchange", DEAD_EXCHANGE);
		map.put("x-dead-letter-routing-key", "dead-routing-key");
		//最大長(zhǎng)度
		//map.put("x-max-length", 6);
		channel.queueDeclare(NORMAL_QUEUE, false, false, false, map);
		channel.queueBind(NORMAL_QUEUE, NORMAL_EXCHANGE, "normal-routing-key");
		DeliverCallback deliverCallback = (consumerTag, delivery) -> {
			String message = new String(delivery.getBody(), StandardCharsets.UTF_8);
			if (message.contains("5")){
				System.out.println("Consumer01接收消息:" + message + ",此消息被拒絕");
				//拒絕消息并把消息丟入死信隊(duì)列
				channel.basicReject(delivery.getEnvelope().getDeliveryTag(), false);
			}else {
				System.out.println("Consumer01接收消息:" + message);
				channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
			}
		};
		channel.basicConsume(NORMAL_QUEUE, false, deliverCallback, (consumerTag, e) -> {});
	}
}

死信隊(duì)列:

package com.weipch.rabbitmq.dlq;

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.weipch.util.RabbitMqUtils;

import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author 方唐鏡
 * @Create 2024-03-03 13:50
 * @Description
 */
public class Consumer02 {
	
	private static final String DEAD_QUEUE = "dead_queue";

	public static void main(String[] args) throws Exception {
		Channel channel = RabbitMqUtils.getChannel();
		channel.basicConsume(DEAD_QUEUE, true,
			(consumerTag, delivery) -> System.out.println("Consumer02:" + new String(delivery.getBody(), StandardCharsets.UTF_8)),
			(consumerTag, e) -> {});
	}
}

生產(chǎn)者發(fā)送消息到正常隊(duì)列,而消費(fèi)者負(fù)責(zé)消費(fèi)正常隊(duì)列的消息。當(dāng)消息被消費(fèi)者拒絕并不再重新投遞時(shí),消息會(huì)被發(fā)送到死信隊(duì)列。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-839926.html

到了這里,關(guān)于RabbitMQ——死信隊(duì)列的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • RabbitMQ-死信交換機(jī)和死信隊(duì)列

    RabbitMQ-死信交換機(jī)和死信隊(duì)列

    DLX: Dead-Letter-Exchange 死信交換器,死信郵箱 當(dāng)消息成為Dead message后,可以被重新發(fā)送到另一個(gè)交換機(jī),這個(gè)交換機(jī)就是DLX。 如下圖所示: 其實(shí)死信隊(duì)列就是一個(gè)普通的交換機(jī),有些隊(duì)列的消息成為死信后,(比如過(guò)期了或者隊(duì)列滿了)這些死信一般情況下是會(huì)被 RabbitMQ 清理

    2024年02月08日
    瀏覽(26)
  • RabbitMQ實(shí)現(xiàn)延遲消息,RabbitMQ使用死信隊(duì)列實(shí)現(xiàn)延遲消息,RabbitMQ延時(shí)隊(duì)列插件

    RabbitMQ實(shí)現(xiàn)延遲消息,RabbitMQ使用死信隊(duì)列實(shí)現(xiàn)延遲消息,RabbitMQ延時(shí)隊(duì)列插件

    假設(shè)有一個(gè)業(yè)務(wù)場(chǎng)景:超過(guò)30分鐘未付款的訂單自動(dòng)關(guān)閉,這個(gè)功能應(yīng)該怎么實(shí)現(xiàn)? RabbitMQ使用死信隊(duì)列,可以實(shí)現(xiàn)消息的延遲接收。 隊(duì)列有一個(gè)消息過(guò)期屬性。就像豐巢超過(guò)24小時(shí)就收費(fèi)一樣,通過(guò)設(shè)置這個(gè)屬性,超過(guò)了指定事件的消息將會(huì)被丟棄。 這個(gè)屬性交:x-message

    2024年02月13日
    瀏覽(104)
  • Rabbitmq死信隊(duì)列及延時(shí)隊(duì)列實(shí)現(xiàn)

    問(wèn)題:什么是延遲隊(duì)列 我們常說(shuō)的延遲隊(duì)列是指消息進(jìn)入隊(duì)列后不會(huì)被立即消費(fèi),只有達(dá)到指定時(shí)間后才能被消費(fèi)。 但RabbitMq中并 沒(méi)有提供延遲隊(duì)列功能 。那么RabbitMQ如何實(shí)現(xiàn)延遲隊(duì)列 通過(guò):死信隊(duì)列 + RabbitMQ的TTL特性實(shí)現(xiàn)。 實(shí)現(xiàn)原理 給一個(gè)普通帶有過(guò)期功能的隊(duì)列綁定一

    2024年02月15日
    瀏覽(20)
  • RabbitMQ——死信隊(duì)列

    死信隊(duì)列(Dead Letter Queue,DLQ)是 RabbitMQ 中的一種重要特性,用于處理無(wú)法被消費(fèi)的消息,防止消息丟失。 死信的來(lái)源 在消息隊(duì)列中,當(dāng)消息滿足一定條件而無(wú)法被正常消費(fèi)時(shí),這些消息會(huì)被發(fā)送到死信隊(duì)列。滿足條件的情況包括但不限于: 消息被拒絕( basic.reject 或 bas

    2024年03月14日
    瀏覽(22)
  • RabbitMQ進(jìn)階——死信隊(duì)列

    RabbitMQ進(jìn)階——死信隊(duì)列

    在消息隊(duì)列中,執(zhí)行異步任務(wù)時(shí),通常是將消息生產(chǎn)者發(fā)布的消息存儲(chǔ)在隊(duì)列中,由消費(fèi)者從隊(duì)列中獲取并處理這些消息。但是,在某些情況下,消息可能無(wú)法正常地被處理和消耗,例如:格式錯(cuò)誤、設(shè)備故障等,這些未成功處理的消息就被稱為“死信”。 為了避免這些未成

    2024年04月13日
    瀏覽(25)
  • RabbitMQ 死信隊(duì)列實(shí)現(xiàn)

    RabbitMQ 死信隊(duì)列實(shí)現(xiàn)

    死信隊(duì)列使用注解實(shí)現(xiàn) 報(bào)錯(cuò): 可以使用注解的方式來(lái)綁定 死信隊(duì)列,但是還是會(huì)報(bào)上面的錯(cuò)誤,繼續(xù)修改 參數(shù)試試 java - How to set x-dead-letter-exchange in Rabbit? - Stack Overflow 但是使用注解綁定的話好像又不生效了,問(wèn)題原因,tmd將死信參數(shù)綁到交換機(jī)上了,c 修改代碼 ?至于問(wèn)題

    2024年02月02日
    瀏覽(16)
  • rabbitmq的死信隊(duì)列

    rabbitmq的死信隊(duì)列

    目錄 成為死信的條件? 消息TTL過(guò)期? ?隊(duì)列達(dá)到最大長(zhǎng)度 ?消息被拒 延遲隊(duì)列 ?延遲隊(duì)列使用場(chǎng)景 ?消息設(shè)置 TTL 隊(duì)列設(shè)置 TTL ?兩者區(qū)別 ? producer 將消息投遞到 broker 或者直接到 queue 里了, consumer 從 queue 取出消息 進(jìn)行消費(fèi),但某些時(shí)候由于特定的 原因?qū)е?queue 中的某些消

    2024年02月12日
    瀏覽(18)
  • RabbitMQ:死信隊(duì)列

    RabbitMQ:死信隊(duì)列

    ??個(gè)人主頁(yè):不斷前進(jìn)的皮卡丘 ??博客描述:夢(mèng)想也許遙不可及,但重要的是追夢(mèng)的過(guò)程,用博客記錄自己的成長(zhǎng),記錄自己一步一步向上攀登的印記 ??個(gè)人專欄:消息中間件 隊(duì)列中不能被消費(fèi)的消息稱為死信隊(duì)列 有時(shí)候因?yàn)樘厥庠?,可能?dǎo)致隊(duì)列中的某些信息無(wú)法被消費(fèi)

    2024年02月02日
    瀏覽(17)
  • RabbitMQ: 死信隊(duì)列

    RabbitMQ: 死信隊(duì)列

    其實(shí)就是一個(gè)普通的隊(duì)列,綁定號(hào)私信交換機(jī),不給ttl,給上匹配的路由,等待交換機(jī)發(fā)送消息。 1.在消費(fèi)者里的RabbitMQConfig配置類里,創(chuàng)建隊(duì)列,給它加參數(shù) 第四個(gè)參數(shù),就是放入這個(gè)隊(duì)列,的一些屬性參數(shù) 也就是這兩個(gè)位置 對(duì)應(yīng)Java代碼里好像少個(gè)參數(shù),排他性,是指,

    2024年02月09日
    瀏覽(24)
  • rabbitMQ引入死信隊(duì)列

    rabbitMQ引入死信隊(duì)列

    ? ? ? ? 指的是,從隊(duì)列當(dāng)中取出來(lái)的消息,到達(dá)消費(fèi)方后,因?yàn)槟承┰驅(qū)е孪⒉](méi)有被正常消費(fèi)掉,這些沒(méi)有被后續(xù)處理的消息就是“死信”,而保存死信的隊(duì)列,就是死信隊(duì)列。 ? ? ? ? 為了保證訂單業(yè)務(wù)的消息數(shù)據(jù)不丟失,需要使用死信隊(duì)列機(jī)制,在消息消費(fèi)發(fā)生

    2024年02月02日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包