RabbitMQ channel.BasicQos


Channel.exchangeDeclare()

type:有direct、fanout、topic三種
durable:true、false true:服務器重啟會保留下來Exchange。警告:僅設置此選項,不代表消息持久化。即不保證重啟后消息還在。原文:true if we are declaring a durable exchange (the exchange will survive a server restart)
autoDelete:true、false.true:當已經沒有消費者時,服務器是否可以刪除該Exchange。原文1:true if the server should delete the exchange when it is no longer in use。

chanel.basicQos()

prefetchSize:0 
prefetchCount:會告訴RabbitMQ不要同時給一個消費者推送多於N個消息,即一旦有N個消息還沒有ack,則該consumer將block掉,直到有消息ack
global:true\false 是否將上面設置應用於channel,簡單點說,就是上面限制是channel級別的還是consumer級別
備注:據說prefetchSize 和global這兩項,rabbitmq沒有實現,暫且不研究

channel.basicPublish()

routingKey:路由鍵,#匹配0個或多個單詞,*匹配一個單詞,在topic exchange做消息轉發用

mandatory:true:如果exchange根據自身類型和消息routeKey無法找到一個符合條件的queue,那么會調用basic.return方法將消息返還給生產者。false:出現上述情形broker會直接將消息扔掉
immediate:true:如果exchange在將消息route到queue(s)時發現對應的queue上沒有消費者,那么這條消息不會放入隊列中。當與消息routeKey關聯的所有queue(一個或多個)都沒有消費者時,該消息會通過basic.return方法返還給生產者。
BasicProperties :需要注意的是BasicProperties.deliveryMode,0:不持久化 1:持久化 這里指的是消息的持久化,配合channel(durable=true),queue(durable)可以實現,即使服務器宕機,消息仍然保留
簡單來說:mandatory標志告訴服務器至少將該消息route到一個隊列中,否則將消息返還給生產者;immediate標志告訴服務器如果該消息關聯的queue上有消費者,則馬上將消息投遞給它,如果所有queue都沒有消費者,直接把消息返還給生產者,不用將消息入隊列等待消費者了。

channel.basicAck();

deliveryTag:該消息的index
multiple:是否批量.true:將一次性ack所有小於deliveryTag的消息。

channel.basicNack(delivery.getEnvelope().getDeliveryTag(), false, true);

deliveryTag:該消息的index
multiple:是否批量.true:將一次性拒絕所有小於deliveryTag的消息。
requeue:被拒絕的是否重新入隊列

 channel.basicReject(delivery.getEnvelope().getDeliveryTag(), false);

deliveryTag:該消息的index
requeue:被拒絕的是否重新入隊列

channel.basicNack 與 channel.basicReject 的區別在於basicNack可以拒絕多條消息,而basicReject一次只能拒絕一條消息

channel.basicConsume(QUEUE_NAME, true, consumer);

autoAck:是否自動ack,如果不自動ack,需要使用channel.ack、channel.nack、channel.basicReject 進行消息應答

chanel.exchangeBind()

channel.queueBind(queueName, EXCHANGE_NAME, bindingKey);
用於通過綁定bindingKey將queue到Exchange,之后便可以進行消息接收

channel.queueDeclare(QUEUE_NAME, false, false, false, null);

 durable:true、false true:在服務器重啟時,能夠存活

exclusive :是否為當前連接的專用隊列,在連接斷開后,會自動刪除該隊列,生產環境中應該很少用到吧。
autodelete:當沒有任何消費者使用時,自動刪除該隊列。this means that the queue will be deleted when there are no more processes consuming messages from it.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM