最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot實(shí)現(xiàn)Activemq死信隊(duì)列詳解

 更新時(shí)間:2023年12月13日 08:52:32   作者:demon7552003  
這篇文章主要介紹了Springboot實(shí)現(xiàn)Activemq死信隊(duì)列詳解,Activemq服務(wù)端配置重新投遞次數(shù)超過?MaximumRedeliveries?,則會(huì)進(jìn)入死信隊(duì)列,默認(rèn)情況,有一個(gè)死信隊(duì)列:AcitveMQ.DLQ,所有的消息都投遞到此隊(duì)列,包括過期消息,重投遞失敗消息,需要的朋友可以參考下

死信隊(duì)列是什么

當(dāng)消息不能重投遞或者消息過期,會(huì)被移到死信隊(duì)列中,由管理員消費(fèi)。

可以進(jìn)行以下操作:

  • delete:刪除記錄
  • retry:重新投遞
  • copy: 復(fù)制到一個(gè)選擇的隊(duì)列中。
  • move:移動(dòng)到一個(gè)選擇的隊(duì)列中。

image-20221021142625060

什么情況下消息會(huì)重投遞

消息重投遞的常用場(chǎng)景:

  • 事務(wù)回滾
  • 事務(wù)提交前close
  • A client is using CLIENT_ACKNOWLEDGE on a Session and calls recover() on that Session.

重新投遞策略

RedeliveryPolicy policy = connection.getRedeliveryPolicy();
policy.setInitialRedeliveryDelay(500);
policy.setBackOffMultiplier(2);
policy.setUseExponentialBackOff(true);
policy.setMaximumRedeliveries(2);

死信隊(duì)列

重新投遞 次數(shù)超過 MaximumRedeliveries ,則會(huì)進(jìn)入死信隊(duì)列。

默認(rèn)情況,有一個(gè)死信隊(duì)列:AcitveMQ.DLQ,所有的消息都投遞到此隊(duì)列,包括過期消息,重投遞失敗消息。

Spring整合

Activemq服務(wù)端配置

重新投遞 次數(shù)超過 MaximumRedeliveries ,則會(huì)進(jìn)入死信隊(duì)列。

默認(rèn)情況,有一個(gè)死信隊(duì)列:AcitveMQ.DLQ,所有的消息都投遞到此隊(duì)列,包括過期消息,重投遞失敗消息。

配置個(gè)性化死信隊(duì)列。

<destinationPolicy>
    <policyMap>
        <policyEntries>
            <policyEntry queue=">">
                <deadLetterStrategy>
                  <individualDeadLetterStrategy queuePrefix="DLQ."
                  useQueueForQueueMessages="true"
                  processExpired="false"
                  processNonPersistent="false"/>
                </deadLetterStrategy>
            </policyEntry>
        </policyEntries>
    </policyMap>
</destinationPolicy>

可以單獨(dú)設(shè)置重投遞策略

    @Bean
    public ActiveMQConnectionFactoryCustomizer myCustomizer2() {
        return new ActiveMQConnectionFactoryCustomizer() {

            /**
             * Customize the {@link ActiveMQConnectionFactory}.
             *
             * @param factory the factory to customize
             */
            @Override
            public void customize(ActiveMQConnectionFactory factory) {

                //設(shè)置了隊(duì)列的 policy。
                ActiveMQQueue q = new ActiveMQQueue("queue.dlq.test");
                RedeliveryPolicy policy = new RedeliveryPolicy();
                policy.setMaximumRedeliveries(3);
                factory.getRedeliveryPolicyMap().put(q,policy);

                System.out.println("Customizer 2");
            }
        };
    }

觸發(fā)重投遞

代碼回滾

 @JmsListener(destination = "queue.dlq.test" ,id = "test")
    public void consume(String param, Session session) {

        try {
            System.out.println(session.getAcknowledgeMode());
            System.out.println(param);
            //回滾,則重投遞
            session.rollback();
        }catch (Exception ex){

        }
    }

拋出異常自動(dòng)回滾

由于默認(rèn)是開啟事務(wù)的,因此拋出異常,會(huì)自動(dòng)觸發(fā)回滾。

@JmsListener(destination = "queue.dlq.test2",id="test2")
    public void consume2(String param, Session session) {
        System.out.println(param);
        throw new RuntimeException("xxxx");
    }
//AbstractMessageListenerContainer
protected void doExecuteListener(Session session, Message message) throws JMSException {
		if (!isAcceptMessagesWhileStopping() && !isRunning()) {
			if (logger.isWarnEnabled()) {
				logger.warn("Rejecting received message because of the listener container " +
						"having been stopped in the meantime: " + message);
			}
			rollbackIfNecessary(session);
			throw new MessageRejectedWhileStoppingException();
		}

		try {
			invokeListener(session, message);
		}
     //JMSException,RuntimeException,Error  這3類異常會(huì)回滾。
		catch (JMSException | RuntimeException | Error ex) {
      //自動(dòng)回滾
			rollbackOnExceptionIfNecessary(session, ex);
			throw ex;
		}
     //自動(dòng)提交
		commitIfNecessary(session, message);
	}

其他的Exception 都會(huì)被包裝成ListenerExecutionFailedException,它是JMSException的子類,所以所有異常都會(huì)導(dǎo)致回滾。

到此這篇關(guān)于Springboot實(shí)現(xiàn)Activemq死信隊(duì)列詳解的文章就介紹到這了,更多相關(guān)Activemq死信隊(duì)列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Security登陸流程講解

    Spring Security登陸流程講解

    本文主要介紹了Spring Security登陸流程講解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Spring Boot 整合mybatis 與 swagger2

    Spring Boot 整合mybatis 與 swagger2

    之前使用springMVC+spring+mybatis,總是被一些繁瑣的xml配置,還經(jīng)常出錯(cuò),下面把以前的一些ssm項(xiàng)目改成了spring boot + mybatis,相對(duì)于來說優(yōu)點(diǎn)太明顯了,具體內(nèi)容詳情大家通過本文學(xué)習(xí)吧
    2017-08-08
  • java求100以內(nèi)的素?cái)?shù)示例分享

    java求100以內(nèi)的素?cái)?shù)示例分享

    素?cái)?shù)是指因數(shù)只有1和本身的數(shù)字,這篇文章主要介紹了java求100以內(nèi)的素?cái)?shù)示例,需要的朋友可以參考下
    2014-03-03
  • Java?Record類介紹及使用方法詳解

    Java?Record類介紹及使用方法詳解

    Record是Java新增的庫類,在Java 14和Java 15中以預(yù)覽(preview)形式公布,這篇文章主要介紹了Java?Record類介紹及使用方法的相關(guān)資料,需要的朋友可以參考下
    2025-08-08
  • Java19新特性中外部函數(shù)與內(nèi)存API

    Java19新特性中外部函數(shù)與內(nèi)存API

    Java19引入的外部函數(shù)與內(nèi)存API(預(yù)覽功能)是Project Panama一部分,旨在簡(jiǎn)化Java與本地代碼及非堆內(nèi)存的交互,提供更低層次的編程能力,解決了傳統(tǒng)JNI調(diào)用的復(fù)雜性、安全性和性能局限,特別適合高性能計(jì)算和系統(tǒng)編程領(lǐng)域,感興趣的可以了解一下
    2024-09-09
  • 2021年最新Redis面試題匯總(1)

    2021年最新Redis面試題匯總(1)

    在程序員面試過程中redis相關(guān)的知識(shí)是常被問到的話題。這篇文章主要介紹了幾道Redis面試題,整理一下分享給大家,感興趣的小伙伴們可以參考一下
    2021-07-07
  • SpringBoot項(xiàng)目從開發(fā)到打包發(fā)布的完整教程

    SpringBoot項(xiàng)目從開發(fā)到打包發(fā)布的完整教程

    本文手把手帶你從零搭建 SpringBoot 項(xiàng)目,實(shí)現(xiàn)Redis 緩存 + MySQL 日志 + 第三方接口調(diào)用,并完成服務(wù)器打包部署,全程與 Node.js 對(duì)比,新手也能快速上手,需要的朋友可以參考下
    2026-04-04
  • IntelliJ IDEA2019實(shí)現(xiàn)Web項(xiàng)目創(chuàng)建示例

    IntelliJ IDEA2019實(shí)現(xiàn)Web項(xiàng)目創(chuàng)建示例

    這篇文章主要介紹了IntelliJ IDEA2019實(shí)現(xiàn)Web項(xiàng)目創(chuàng)建示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Java中Arrays工具類的一些常見方法總結(jié)

    Java中Arrays工具類的一些常見方法總結(jié)

    在Java中Arrays類是一個(gè)實(shí)用工具類,用于在數(shù)組上執(zhí)行各種操作,包括排序、搜索、比較等,這篇文章主要給大家介紹了關(guān)于Java中Arrays工具類的一些常見方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • Spring之動(dòng)態(tài)注冊(cè)bean的實(shí)現(xiàn)方法

    Spring之動(dòng)態(tài)注冊(cè)bean的實(shí)現(xiàn)方法

    這篇文章主要介紹了Spring之動(dòng)態(tài)注冊(cè)bean的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08

最新評(píng)論

卢湾区| 南安市| 石嘴山市| 巴青县| 上饶县| 武平县| 邛崃市| 大荔县| 碌曲县| 瑞昌市| 衡南县| 阳高县| 镇赉县| 黄浦区| 广昌县| 黄山市| 福安市| 淮安市| 扎兰屯市| 清水河县| 稷山县| 英超| 循化| 铜川市| 汶上县| 吉安市| 大余县| 鄢陵县| 玉林市| 青阳县| 鸡泽县| 且末县| 阿城市| 南澳县| 景泰县| 北流市| 香河县| 乐陵市| 敦化市| 丰城市| 中方县|