1. 程式人生 > >rabbitmq 某佇列的訊息有60個時,消費者對應的程式碼居然跑不成功

rabbitmq 某佇列的訊息有60個時,消費者對應的程式碼居然跑不成功

正常情況下,生產者與消費者的程式碼都跑起來,才開始執行業務,你生產訊息,我快速消費訊息的。

在解決這個問題的時候,https://mp.csdn.net/postedit/80662904, 偶然發現了這個坑,如題。

背景:一個佇列對應20個消費者。有很多個佇列,channel 數量200左右, 一個消費者對應一個channel。

問題: 消費者的程式碼沒有啟動,現在一個佇列已經有訊息60個了。 現要啟動消費者時,啟動報錯,且造成訊息的數量有問題。



圖可能不是很直觀,說明一下, 一個佇列20個消費者,正常來說,在啟動消費者程式碼的時候,每個消費者對應一個新的channel,

每當一個消費者訂閱一個訊息時,拿到訊息,就去幹活了。

日誌現在報,有消費者在繫結channel的時候,繫結到別人的channel。

思路: 之前的思路遍歷所有佇列,給每個佇列生成20個消費者,每個消費者指定一個channel的時候,便去訂閱訊息。 

 conn.createChannel();

   消費者建立指定新的channel;

channel.basicConsume(queue, autoAck, "myConsumerTag", new DefaultConsumer(getChannel())

  消費者拿到 channel,便訂閱訊息。

故這樣,所有消費者還沒指定channel, 就有消費者拿到訊息去幹活了, 故就啟動報錯了。

啟動報錯不暫停的情況下,經發現訊息,數量不對,且訊息消費混亂。 

rabbitmq原碼追綜,沒有搞懂,消費者建立新的channel,為什麼是之前消費者繫結的,重複引用。 

改造: 所有消費者都指定好channel,  才一起訂閱訊息。 這樣channel肯定不會重複。

相關推薦

rabbitmq 佇列訊息60消費者對應程式碼居然成功

正常情況下,生產者與消費者的程式碼都跑起來,才開始執行業務,你生產訊息,我快速消費訊息的。在解決這個問題的時候,https://mp.csdn.net/postedit/80662904, 偶然發現了這個坑,如題。背景:一個佇列對應20個消費者。有很多個佇列,channel

一個執行緒多handler會多少looperlooper如何區分handler會導致訊息錯亂。

面試題: 問題1:一個執行緒中初始化多個handler,會產生多少個looper? 問題2:如果只有一個looper,looper如何區分handler,handler傳送了訊息會不會導致Looper錯亂,最終不知道誰處理。 1 一個執行緒中初始化多個handler,會

學生每個學生3門課的成績 從鍵盤輸入以上資料(包括姓名三門課成績) 輸入的格式:如:zhagnsan3040,60計算出總成績 並把學生的資訊和計算出的總分數高低順序存放在磁碟文

有五個學生,每個學生有3門課的成績, 從鍵盤輸入以上資料(包括姓名,三門課成績), 輸入的格式:如:zhagnsan,30,40,60計算出總成績, 並把學生的資訊和計算出的總分數高低順序存放在磁碟檔案"stud.txt"中。 1:定義一個描述學生的類2定義一個操作學生的工

SQL不同伺服器資料庫之間資料操作(當在一個伺服器的張表中資料更新將更新值通過觸發器插入到另一個伺服器的指定表中)

第一步:在建立觸發器的伺服器上建立連結伺服器 建立連結伺服器有兩種方法:1.通過SQL語言建立,2.通過資料庫管理工具建立,下面分別進行詳細介紹: 1.通過SQL語言建立 通過SQL語言建立連結伺服器方法 2.通過資料庫管理工具建立(這裡以SQL SER

一個類方法其中一個是同步的另一個是非同步的; 現在又兩執行緒A和B請問:當執行緒A訪問此類的同步方法執行緒B是否能訪問此類的非同步方法?

一個類有兩個方法,其中一個是同步的,另一個是非同步的;現在又兩個執行緒A和B,請問:當執行緒A訪問此類的同步方法時,執行緒B是否能訪問此類的非同步方法? 答案:可以 驗證 package com.my.test2; public class ClassA { public syn

sql算段時間星期一,取本月所有的週三, 取上個月所有的週三 etc

sql算某段時間有幾個星期一 DECLARE @t TABLE(dt DATETIME) DECLARE @dtStart DATETIME DECLARE @dtEnd DATETIME SET @dtStart='2014-10-01' SET @dtEnd='201

一個jar包裡main指定執行一個main

如果一個jar中含有多個主程式,而你沒有配置預設主程式,或者想要執行指定主程式,則可以通過如下命令執行:java -cp example03-1.0-SNAPSHOT.jar com.alan.HelloWorld-cp <目錄和 zip/jar 檔案的類搜尋路徑>

RecketMQ-同一個group下Topic訊息能傳送到Topic中但無法被監聽到

問題描述:現有多個應用,傳送和監聽訊息使用的GROUP為同一個,在該GROUP下面有多個TOPIC,往其中一個TOPIC傳送訊息

(待做例子)問題描述: el-tab 下2路由其中第1路由設置了 beforeRouteLeave點擊 el-tab 第2tab時,樣式直接跟過去了(預期結果是:樣式到第二tab上beforeRouteLeave允許跳轉後才到第二tab上)

last filter cond 結果 tick 允許 代碼 his 過去 解決: 經過以上分析,強制賦值應該在前次賦值而且DOM已經刷新完畢之後進行。可以使用$nextTick,以下是代碼: handleTabClick (tab) {

題目:判斷101-200之間多少素數並輸出所有素數

[] bool ole enum print 輸出 static ber while 1 public class PrimeNumber{//100-200直接有多少素數 2 public static void main(String[] args){

按鈕點擊一個變色點擊另一個變色原來的恢復顏色的方法

click dcl 多個 cti 方法 fault tar span 變色 <a class="btn btn-default changChick" onclick="changChick(this)">高</a> <a class="btn

java中如何知道一個字符串中多少把每個字打印出來舉例

有一個 url ont chapter 書籍 whole mar strong posit (視頻下載) (全部書籍) 9.6 About string,"I am a teacher",這個字符串中有多少個字,且分別把每個字打印出來。 /*本題的思路就是,當我有

服務器兩網卡插兩根網線ip求解這是什麽梗

1.9 網線 13.10 靜態ip 分別是 虛擬 type 3.1 ima 2018-09-23公司的一臺HP的服務器上,兩個網卡設置,插了兩個網線,但是卻有三個ip。不解,希望來個大神指點迷津如下圖第一個圖是該機器上的網卡,兩個網卡和一個回環接口的 第二幅圖是第一個網卡的

n整數使前面各數順序向後移m位置最後m個數變成前面m個數。寫一函式:實現以上功能在主函式中輸入n個數和輸出調整後的n個數。

import java.util.Scanner; public class Main {     public static void main(String[] args){         Scanner sc = new Scann

當xlsx中sheet讀取其中一個sheet

以下讀取方法主要是自己認為比較簡單的方式 如果知道sheet_name,直接 import pandas as pd pd.read_excel(data_file,sheet_name) 獲取sheet_names的方法 import openpyxl wb = openpyxl.

假定我們3程式每個程式花費80%的時間進行I/O20%的時間使用CPU

2 假定我們有3個程式,每個程式花費80%的時間進行I/O,20%的時間使用CPU,每個程式的啟動時間和其需要使用CPU進行計算機的分鐘數如表所示 程式編號      啟動時間    &nb

數列極限在使用單調界準則開的找單調

若為了證明極限存在,決定採用單調有界準則,那麼就需要找出,單調,有界 現總結集中判斷單調的方法 (1)直接用與相減比較大小關係,這應該是最簡單的 (2)可以考慮採用數學歸納法,證明第一項 第二項滿足關係,假設第n項和第n-1項滿足關係,證明n+1和第n項也滿足關係   不過