RabbitMQ跟Redis做訊息佇列的區別

2022-04-04 01:27:49 字數 3758 閱讀 7772

區別

rabbitmq安裝

然後http://localhost:15672 進得去 說明安裝成功

有三種模式  fanout , direct topic   

fanout 傳送到所有的佇列

direct 可以設定key 傳送到對應的佇列

topic 第二種的增強版   key支援模糊匹配

自己建立賬號  不要用guest賬號(應用程式跟rabbitmq在同乙個電腦上  可以用guest登陸     guest賬號給限制了  無法通過外網登陸   )

賬號建立完成需要設定賬號許可權才可以使用

1.生產者

//

建立連線工廠

connectionfactory factory = new

connectionfactory

;//建立連線

var connection =factory.createconnection();

//建立通道

var channel =connection.createmodel();

//宣告乙個佇列

channel.queuedeclare("

hello

", false, false, false, null

); console.writeline(

"\nrabbitmq連線成功,請輸入訊息,輸入exit退出!");

string

input;

do while (input.trim().tolower() != "

exit");

channel.close();

connection.close();

2.消費者

//

建立連線工廠

connectionfactory factory = new

connectionfactory

;//建立連線

var connection =factory.createconnection();

//建立通道

var channel =connection.createmodel();

//事件基本消費者

eventingbasicconsumer consumer = new

eventingbasicconsumer(channel);

//接收到訊息事件

consumer.received += (ch, ea) =>");

//確認該訊息已被消費

channel.basicack(ea.deliverytag, false

); };

//啟動消費者 設定為手動應答訊息

//監聽hello佇列

channel.basicconsume("

hello

", false

, consumer);

console.writeline(

"消費者已啟動");

console.readkey();

channel.dispose();

connection.close();

channel.basicack(ea.deliverytag, false);

執行這句話就表示當前這條記錄已經被消費

可以在這句話之前執行呼叫介面 或者某些資料庫操作 成功在執行這句話 不成功該條資訊還會放回佇列中

上面這種寫法是生產者直接把訊息直接放到某個佇列中 一般我們不會這樣做 實際上都是生產者將訊息傳送到exchange交換器中 由它將訊息路由到乙個或多個佇列(queue)中

string exchangename = "

testfanoutchange";

string queuename1 = "

hello1";

string queuename2 = "

hello2";

string routekey = ""

;

//建立連線工廠

connectionfactory factory = new

connectionfactory

;//建立連線

var connection =factory.createconnection();

//建立通道

var channel =connection.createmodel();

//定義乙個direct型別交換機

channel.exchangedeclare(exchangename, exchangetype.fanout, false, false, null

);

//定義佇列1

channel.queuedeclare(queuename1, false, false, false, null

);

//定義佇列2

channel.queuedeclare(queuename2, false, false, false, null

);

//將佇列繫結到交換機

channel.queuebind(queuename1, exchangename, routekey, null

); channel.queuebind(queuename2, exchangename, routekey,

null

);

//生成兩個佇列的消費者

consumergenerator(queuename1);

consumergenerator(queuename2);

console.writeline(

"\nrabbitmq連線成功,請輸入訊息,輸入exit退出!");

string

input;

do while (input.trim().tolower() != "

exit");

channel.close();

connection.close();

static

void consumergenerator(string

queuename)

;//建立連線

var connection =factory.createconnection();

//建立通道

var channel =connection.createmodel();

//事件基本消費者

eventingbasicconsumer consumer = new

eventingbasicconsumer(channel);

//接收到訊息事件

consumer.received += (ch, ea) =>收到訊息: ");

//確認該訊息已被消費

channel.basicack(ea.deliverytag, false

); };

//啟動消費者 設定為手動應答訊息

channel.basicconsume(queuename, false

, consumer);

console.writeline($

"queue:,消費者已啟動");

}

更具體的 見  

redis與rabbitmq做訊息佇列的區別

訊息佇列 message queue 是一種應用間的通訊方式,訊息傳送後可以立即返回,由訊息系統來確保訊息的可靠傳遞。訊息發布者只管把訊息發布到 mq 中而不用管誰來取,訊息使用者只管從 mq 中取訊息而不管是誰發布的。這樣發布者和使用者都不用知道對方的存在。redis 在我的學習過程中,redis...

RabbitMQ與Redis佇列對比

本文僅針對rabbitmq與redis做佇列應用時的情況進行對比 具體採用什麼方式實現,還需要取決於系統的實際需求 rabbitmq是實現amqp 高階訊息佇列協議 的訊息中介軟體的一種,最初起源於金融系統,用於在分布式系統中儲存 訊息,在易用性 擴充套件性 高可用性等方面表現不俗。訊息中介軟體主要...

RabbitMQ與Redis佇列對比

rabbitmq是實現amqp 高階訊息佇列協議 的訊息中介軟體的一種,最初起源於金融系統,用於在分布式系統中儲存 訊息,在易用性 擴充套件性 高可用性等方面表現不俗。訊息中介軟體主要用於元件之間的解耦,訊息的傳送者無需知道訊息使用者的存在,反之亦然。是乙個key value的nosql資料庫,開發...