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

(18)不重啟服務(wù)動態(tài)停止、啟動RabbitMQ消費者

這篇具有很好參考價值的文章主要介紹了(18)不重啟服務(wù)動態(tài)停止、啟動RabbitMQ消費者。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

????????我們在消費RabbitMQ消息的過程中,有時候可能會想先暫停消費一段時間,然后過段時間再啟動消費者,這個需求怎么實現(xiàn)呢?我們可以借助RabbitListenerEndpointRegistry這個類來實現(xiàn),它的全類名是org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry,通過這個類可以實現(xiàn)全部隊列消息的啟動、停止消費,也可以實現(xiàn)指定隊列消息的啟動、停止消費。具體的原因感興趣的話可以參考一下我前面的這篇博客(17)不重啟服務(wù)動態(tài)調(diào)整RabbitMQ消費者數(shù)量,里面有相應(yīng)的源碼分析。

停止、啟動全部隊列消費

????????RabbitListenerEndpointRegistry類提供了start()方法和stop()方法,可以看到底層都是通過調(diào)用getListenerContainers()獲取到所有隊列的消費監(jiān)聽容器列表,然后遍歷挨個調(diào)用對應(yīng)的start()方法和stop()方法。

	@Override
	public void start() {
		for (MessageListenerContainer listenerContainer : getListenerContainers()) {
			startIfNecessary(listenerContainer);
		}
	}

	@Override
	public void stop() {
		for (MessageListenerContainer listenerContainer : getListenerContainers()) {
			listenerContainer.stop();
		}
	}

? ? ? ? 我們只需要獲取到RabbitListenerEndpointRegistry對象,然后調(diào)用其start()方法和stop()方法即可實現(xiàn)啟動/停止所有隊列消費。

? ? ? ? 實現(xiàn)代碼如下所示:

@Resource
RabbitListenerEndpointRegistry rabbitListenerEndpointRegistry;

@RequestMapping(value = "/startStopAllConsumer")
@ApiOperation(value = "啟動/暫停全部隊列消息消費")
public Response startStopAllConsumer(@RequestParam(value = "consumeSwitch", required = true) boolean consumeSwitch) {
	log.info("啟動/暫停全部隊列消息消費,consumeSwitch:{}",consumeSwitch);
	if(consumeSwitch){
		rabbitListenerEndpointRegistry.start();
	}else {
		rabbitListenerEndpointRegistry.stop();
	}
	return Response.success();
}

????????傳入開關(guān)參數(shù)為false,會停止所有隊列消費者消費,調(diào)用后控制臺看到如下日志

2023-09-04 19:43:11.480 +0800 [TID: N/A] [http-nio-8080-exec-4] INFO ?c.b.t.m.p.w.PayCashierMockController:67 - 啟動/暫停全部隊列消息消費,consumeSwitch:false
2023-09-04 19:43:11.556 +0800 [TID: N/A] [http-nio-8080-exec-4] INFO ?o.s.a.r.l.SimpleMessageListenerContainer:586 - Waiting for workers to finish.
2023-09-04 19:43:12.352 +0800 [TID: N/A] [http-nio-8080-exec-4] INFO ?o.s.a.r.l.SimpleMessageListenerContainer:589 - Successfully waited for workers to finish.
可以看到消息監(jiān)聽容器關(guān)閉的日志,然后再傳入開關(guān)參數(shù)為true,調(diào)用后會啟動所有隊列消息消費。

停止、啟動指定隊列消費

? ? ? ? 上面提到了RabbitListenerEndpointRegistry.getListenerContainers()可以獲取到所有隊列的消費監(jiān)聽容器列表,我們可以使用MessageListenerContainer中獲取消費的隊列名進(jìn)行判斷,以實現(xiàn)指定隊列的停止、啟動消費。

????????實現(xiàn)代碼如下所示:

@Resource
RabbitListenerEndpointRegistry rabbitListenerEndpointRegistry;

@RequestMapping(value = "/startStopConsumer")
@ApiOperation(value = "啟動/暫停指定隊列消息消費")
public Response startStopConsumer(@RequestParam(value = "queueName", required = false) String queueName,
									@RequestParam(value = "consumeSwitch", required = true) boolean consumeSwitch) {
	log.info("啟動/暫停指定隊列消息消費,consumeSwitch:{},queueName:{}",consumeSwitch,queueName);
	//獲取所有消息監(jiān)聽容器
	Collection<MessageListenerContainer> listenerContainers = rabbitListenerEndpointRegistry.getListenerContainers();
	for (MessageListenerContainer container : listenerContainers) {
		SimpleMessageListenerContainer con = (SimpleMessageListenerContainer) container;
		//消息監(jiān)聽容器要消費的隊列名稱集合
		List<String> queueNamesList = Arrays.asList(con.getQueueNames());
		//判斷容器中的隊列名稱是否包含需要調(diào)整的隊列名參數(shù)
		if (queueNamesList.contains(queueName)) {
			if(consumeSwitch){
				con.start();
			}else{
				con.stop();
			}
		}
	}
	return Response.success();
}

傳入開關(guān)參數(shù)為false,停止pay_work_notify隊列消費者消費,調(diào)用后控制臺看到如下日志

2023-09-04 19:51:37.130 +0800 [TID: N/A] [http-nio-8080-exec-1] INFO ?c.b.t.m.p.w.PayCashierMockController:80 - 啟動/暫停指定隊列消息消費,consumeSwitch:false,queueName:pay_work_notify
2023-09-04 19:51:37.200 +0800 [TID: N/A] [http-nio-8080-exec-1] INFO ?o.s.a.r.l.SimpleMessageListenerContainer:586 - Waiting for workers to finish.
2023-09-04 19:51:37.903 +0800 [TID: N/A] [http-nio-8080-exec-1] INFO ?o.s.a.r.l.SimpleMessageListenerContainer:589 - Successfully waited for workers to finish.
可以看到消息監(jiān)聽容器關(guān)閉的日志,然后再傳入開關(guān)參數(shù)為true,調(diào)用后會啟動pay_work_notify隊列消息消費。文章來源地址http://www.zghlxwxcb.cn/news/detail-707658.html

到了這里,關(guān)于(18)不重啟服務(wù)動態(tài)停止、啟動RabbitMQ消費者的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • WindowsPowerShell 停止、啟動、暫停和重啟服務(wù)、卸載服務(wù)

    WindowsPowerShell 停止、啟動、暫停和重啟服務(wù)、卸載服務(wù)

    PowerShell 停止、啟動、暫停和重啟服務(wù) 官文 powershell卸載服務(wù) 官文 所有 Service cmdlet 都具有相同的一般形式。 可以按公用名或顯示名稱指定服務(wù),并使用列表和通配符作為值。 停止服務(wù) 若要停止打印后臺處理程序,請使用: 啟動服務(wù) 若要在打印后臺處理程序停止后啟動它,

    2024年02月05日
    瀏覽(65)
  • 【ELK解決方案】ELK集群+RabbitMQ部署方案以及快速開發(fā)RabbitMQ生產(chǎn)者與消費者基礎(chǔ)服務(wù)...

    【ELK解決方案】ELK集群+RabbitMQ部署方案以及快速開發(fā)RabbitMQ生產(chǎn)者與消費者基礎(chǔ)服務(wù)...

    前言: 大概一年多前寫過一個部署ELK系列的博客文章,前不久剛好在部署一個ELK的解決方案,我順便就把一些基礎(chǔ)的部分拎出來,再整合成一期文章。大概內(nèi)容包括:搭建ELK集群,以及寫一個簡單的MQ服務(wù)。 如果需要看一年多之前寫的文章,可以詳見下列文章鏈接(例如部署

    2023年04月08日
    瀏覽(46)
  • Windows系統(tǒng)編寫bat腳本啟動,停止,重啟Java服務(wù)jar包

    Windows系統(tǒng)編寫bat腳本啟動,停止,重啟Java服務(wù)jar包

    創(chuàng)建一個以bat后綴結(jié)束的文件,寫入一下代碼: 在Windows系統(tǒng)上面創(chuàng)建 start.bat 啟動jar包腳本編輯以下內(nèi)容: 給窗口命名:“jeeplus-gateway”,如果是微服務(wù)的話方便查看 在Windows系統(tǒng)上面創(chuàng)建 stop.bat 停止jar包腳本編輯以下內(nèi)容: 重啟jar包就是將兩個合并到一起: 雙擊 bat文件 確

    2024年02月03日
    瀏覽(39)
  • 在linux上啟動、重啟、查詢、停止java服務(wù)腳本,并且設(shè)置定時任務(wù)自動執(zhí)行

    以下代碼來源于另一位博主,在實踐過程中需要設(shè)置定時任務(wù),所以遇到一些問題,把沒有寫清楚的地方優(yōu)化了一下。 我們把上面的腳本復(fù)制到以下目錄的腳本文件/data/www/shtools/startmanage.sh,執(zhí)行命令可以得到不同的結(jié)果。 設(shè)置的三個定時任務(wù)運行腳本, 第一個是0 3 * * *

    2024年02月07日
    瀏覽(34)
  • 如何一鍵啟動、停止或重啟運行在服務(wù)器內(nèi)的幻獸帕魯游戲服務(wù)進(jìn)程?

    如何一鍵啟動、停止或重啟運行在服務(wù)器內(nèi)的幻獸帕魯游戲服務(wù)進(jìn)程?

    如果你是用騰訊云輕量應(yīng)用服務(wù)器一鍵部署的幻獸帕魯服務(wù)器,那么可以在面板一鍵啟動、停止或重啟運行在服務(wù)器內(nèi)的幻獸帕魯游戲服務(wù)進(jìn)程(注意并非對服務(wù)器整機(jī)進(jìn)行操作),無需手動在服務(wù)器內(nèi)部運行命令。 詳細(xì)教程地址:https://docs.qq.com/doc/DQnBvck1Jb2Vud2NE

    2024年04月09日
    瀏覽(19)
  • RabbitMQ多消費者實例時,保證只有一個消費者進(jìn)行消費(單活消費者模式)

    RabbitMQ多消費者實例時,保證只有一個消費者進(jìn)行消費(單活消費者模式)

    有一種業(yè)務(wù)場景,當(dāng)人員組織結(jié)構(gòu)變更時,會有大量數(shù)據(jù)進(jìn)行推送。這些數(shù)據(jù)類型有的是add,有的是update,并且必須先add,才能進(jìn)行update。 這時,為了保證消費順序,需要 只有一個實例進(jìn)行按順序消費,其他實例僅提供日常對外服務(wù) ,不進(jìn)行消息消費。當(dāng)唯一消費實例無法

    2024年02月11日
    瀏覽(22)
  • RabbitMQ 消費者

    RabbitMQ 消費者

    ??RabbitMQ的消費模式分兩種:推模式和拉模式,推模式采用Basic.Consume進(jìn)行消費,拉模式則是調(diào)用Basic.Get進(jìn)行消費。 ??消費者通過訂閱隊列從RabbitMQ中獲取消息進(jìn)行消費,為避免消息丟失可采用消費確認(rèn)機(jī)制 ??顧名思義,拉模式就是消費者主動的從RabbitMQ中獲取數(shù)據(jù),通

    2024年02月11日
    瀏覽(46)
  • RabbitMQ-消費者確認(rèn)機(jī)制

    none:不做任何處理,消息投遞到消費者了之后,立即返回ACK,并且從MQ將消息刪除,非常不安全,不建議使用。 manual:手動模式,需要在業(yè)務(wù)中調(diào)用api,ack或者reject。 auto:自動模式,SpringAMQP利用AOP對我們的消息處理做了環(huán)繞增強(qiáng),當(dāng)業(yè)務(wù)正常執(zhí)行時返回ACK,執(zhí)行異常時,根

    2024年01月21日
    瀏覽(14)
  • docker—啟動、停止、重啟容器實例

    docker—啟動、停止、重啟容器實例

    先查看已經(jīng)暫停的容器實例信息 docker ps -a 通過 docker start xxx 啟動容器 通過 docker ps 查看當(dāng)前啟動的容器 1、docker stop 此方式常常被翻譯為優(yōu)雅的停止容器 docker stop 容器ID或容器名 參數(shù) -t:關(guān)閉容器的限時,如果超時未能關(guān)閉則用kill強(qiáng)制關(guān)閉,默認(rèn)值10s,這個時間用于容器的

    2024年02月09日
    瀏覽(97)
  • RabbitMQ消費者的可靠性

    RabbitMQ消費者的可靠性

    目錄 一、消費者確認(rèn) 二、失敗重試機(jī)制 2.1、失敗處理策略 三、業(yè)務(wù)冪等性 3.1、唯一消息ID ?3.2、業(yè)務(wù)判斷 3.3、兜底方案 一、消費者確認(rèn) RabbitMQ提供了消費者確認(rèn)機(jī)制( Consumer Acknowledgement )。即:當(dāng)消費者處理消息結(jié)束后,應(yīng)該向RabbitMQ發(fā)送一個回執(zhí),告知RabbitMQ自己消息

    2024年02月07日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包