RabbitMQ的Connection和Channel區別如下。
簡單說Channel是基於Connection的虛擬連線,讓不同執行緒可在同一條TCP連線中使用各自的Channel來達到訊息隔離。
應用程式需要RabbitMQ建立TCP連線才能傳遞訊息,而這個連線就是Connection,但應用程式可能同時有多個地方(多個執行緒)需要需要同時並行傳遞訊息給RabbitMQ,為每個訊息傳遞建立Connection非常浪費系統與連線資源(一條TCP連線就佔一個port、建立連線的overhead,以及需要較多記憶體)。例如下面是RabbitMQ console目前使用的Connection,每個Connection都是獨立的TCP連線。
而Channel可看作是一種基於於Connection的輕量連線,如此在並行傳遞訊息時只要建立一條TCP連線,再為每個執行緒的訊息發送建立各自的Channel來減少資源開銷並達到訊息隔離。
因此通常應用程式會只會建立一條與RabbitMQ的Connection,而每次要發送訊息時再建立Channel來發送。
沒有留言:
張貼留言