mq消息隊(duì)列阻塞怎么辦 RabbitMQ怎樣能實(shí)現(xiàn)多個隊(duì)列由一個消費(fèi)者來接收消息?
RabbitMQ怎樣能實(shí)現(xiàn)多個隊(duì)列由一個消費(fèi)者來接收消息?1. 笨拙的方法是循環(huán)。消耗的阻塞監(jiān)視可以設(shè)置超時(shí)。通過設(shè)置較小的超時(shí),可以依次監(jiān)視多個通道,也可以變相監(jiān)視多個隊(duì)列。性能要求不是很高,所以可
RabbitMQ怎樣能實(shí)現(xiàn)多個隊(duì)列由一個消費(fèi)者來接收消息?
1. 笨拙的方法是循環(huán)。消耗的阻塞監(jiān)視可以設(shè)置超時(shí)。通過設(shè)置較小的超時(shí),可以依次監(jiān)視多個通道,也可以變相監(jiān)視多個隊(duì)列。性能要求不是很高,所以可以采用這種方法
2。另一種方法是先取出一個隊(duì)列中的消息數(shù),然后在循環(huán)中讀出消息,然后切換到另一個隊(duì)列如果所有隊(duì)列中都沒有消息,它們將在此循環(huán)中等待
3。有專業(yè)人士的回答,但我還沒有完全理解:
消費(fèi)者是業(yè)務(wù)層的概念,消費(fèi)或訂閱是AMQP,因此,如果你問消費(fèi)者是否可以訂閱多個隊(duì)列,答案當(dāng)然是。解決方案也是一種,根據(jù)協(xié)議的進(jìn)程,分別向不同的隊(duì)列進(jìn)行查詢。是使用多線程還是事件驅(qū)動(單線程)取決于實(shí)現(xiàn)。
如果控制多線程的能力不是很強(qiáng),建議不要使用這種方法,這太專業(yè)了
4。后來我仔細(xì)考慮了這個問題。也許我可以在應(yīng)用層重新設(shè)計(jì)它。我可以將線程池用作只讀消息的多個使用者,而不處理它們。然后將它們發(fā)布到另一個隊(duì)列中,并使用一個使用者來處理消息
PS-Ef | grep rabbit查看rabbit進(jìn)程并根據(jù)進(jìn)程判斷安裝路徑
/usr/lib/rabbit MQ/lib/rabbit MQ_uuserver-3.6.13
輸入rabbit的安裝路徑,文件列表結(jié)構(gòu)如下進(jìn)入SBIN目錄
輸入命令rabbitmqctl list超過20000個數(shù)據(jù)
關(guān)閉應(yīng)用程序
rabbitmqctl stop應(yīng)用程序
執(zhí)行清除命令
rabbitmqctl reset
7
啟動應(yīng)用程序
rabbitmqctl start應(yīng)用程序
8
驗(yàn)證rabbitmqctl list隊(duì)列