區別
rabbitmq安裝
然後http://localhost:15672 進得去 說明安裝成功
有三種模式 fanout , direct topic
fanout 傳送到所有的佇列
direct 可以設定key 傳送到對應的佇列
topic 第二種的增強版 key支援模糊匹配
自己建立賬號 不要用guest賬號(應用程式跟rabbitmq在同乙個電腦上 可以用guest登陸 guest賬號給限制了 無法通過外網登陸 )
賬號建立完成需要設定賬號許可權才可以使用
1.生產者
//2.消費者建立連線工廠
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();
//建立連線工廠
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();
staticvoid 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資料庫,開發...