- queue 可以和同一個(gè) exchange bind 多個(gè) routingKey
- qos (prefetchCount) 的意義:prefetchCount 數(shù)量表示不 ack 一次請(qǐng)求獲取的 message 數(shù)量瞳秽,可以增加吞吐量
- 消費(fèi)者只和隊(duì)列有關(guān)系码俩,和 routingKey exchage 沒(méi)有關(guān)系。
- exchage 負(fù)責(zé)把消息放入指定隊(duì)列尿招,和消費(fèi)者沒(méi)有關(guān)系
- 獨(dú)占隊(duì)列表示這個(gè)隊(duì)列只能被此 connection 獨(dú)占
- 隊(duì)列分發(fā)消息使用輪詢機(jī)制厢破,也就是說(shuō)如果有多個(gè)消費(fèi)者消費(fèi)同一個(gè)隊(duì)列,消費(fèi)者時(shí)輪詢接收到消息的
- 默認(rèn)情況下,如果 exchange 無(wú)法處理該消息會(huì)丟棄消息,如果想要知道是否已處理咒彤,請(qǐng)使用用 mandatory 參數(shù)發(fā)布消息。開(kāi)啟 mandatory 后咒精,broker 會(huì)發(fā)送一個(gè) basic.return 給發(fā)送者
- rabbitmq 沒(méi)有支持 immediate 參數(shù)蔼紧,immediate = true 是指發(fā)送消息時(shí)是否判斷有消費(fèi)者能處理該消息,如果沒(méi)有則立即丟棄狠轻。如果要實(shí)現(xiàn)類似功能請(qǐng)使用 DLX (死信隊(duì)列)
- 發(fā)布者開(kāi)啟 confirm 模式的 java 方法:
final AMQP.Confirm.SelectOk selectOk = channel.confirmSelect();
channel.basicPublish(EXCHANGE, ROUTE_KEY, true, false, null, message.getBytes());
final boolean b = channel.waitForConfirms();
....
這也是事務(wù)的替代方式。因?yàn)殚_(kāi)始事務(wù)模式會(huì)降低250倍的性能彬犯。channel.waitForConfirms();
方法執(zhí)行時(shí)會(huì)阻塞向楼。
- rabbitmq 不僅支持隊(duì)列整體設(shè)置消息過(guò)期時(shí)間還支持對(duì)每條消息設(shè)置過(guò)期時(shí)間查吊,如果兩個(gè)同時(shí)設(shè)置,則取兩個(gè)中最小的
- rabbitmq 支持隊(duì)列過(guò)期湖蜕,當(dāng)沒(méi)有消費(fèi)者時(shí)逻卖,到期后會(huì)自動(dòng)刪除隊(duì)列
- 死信隊(duì)列用于延時(shí)的注意事項(xiàng):
當(dāng)后面消息的過(guò)期時(shí)間小于前面的消息時(shí),死信時(shí)還是按順序放入其他隊(duì)列