各消息隊列的使用
http://blog.csdn.net/konglongaa/article/details/52208273
各種MQ對比
綜合選擇RabbitMQ
優(yōu)缺點
RabbitMQ
遵循AMQP實現(xiàn)订歪,傳統(tǒng)的messaging queue系統(tǒng)實現(xiàn),基于Erlang語言開發(fā)衔掸,
用在對數(shù)據(jù)一致性檀何、穩(wěn)定性和可靠性要求很高的場景关划,對性能和吞吐量還在其次通铲。
支持協(xié)議還包括XMPP渣玲、SMTP、STOMP夺克,是一款重量級MQ箕宙,更適合于企業(yè)級的開發(fā)。實現(xiàn)Broker構架铺纽,消息在發(fā)送給客戶端時先在中心隊列排隊柬帕。對路由、負載均衡及數(shù)據(jù)持久化都有良好的支持室囊。Kafka
優(yōu)點:
可擴展雕崩。Kafka集群可以透明的擴展,增加新的服務器進集群融撞。
高性能盼铁。Kafka性能遠超過傳統(tǒng)的ActiveMQ、RabbitMQ等尝偎,Kafka支持Batch操作饶火。
容錯性。Kafka每個Partition數(shù)據(jù)會復制到幾臺服務器致扯,當某個Broker失效時肤寝,Zookeeper將通知生產者和消費者從而使用其他的Broker。
缺點:
重復消息抖僵。Kafka保證每條消息至少送達一次鲤看,雖然幾率很小,但一條消息可能被送達多次耍群。
消息亂序义桂。Kafka某一個固定的Partition內部的消息是保證有序的,如果一個Topic有多個Partition蹈垢,partition之間的消息送達不保證有序慷吊。
復雜性。Kafka需要Zookeeper的支持曹抬,Topic一般需要人工創(chuàng)建溉瓶,部署和維護比一般MQ成本更高。
RabbitMQ消息可靠性
- 發(fā)送者
發(fā)送這端利用confirm保證消息可以順利達到rabbitmq,消息開啟持久化(Delivery Mode = 2).
發(fā)送者發(fā)送一個消息,到達rabbitmq,然后rabbitmq認為此消息需要持久化,經過內存到磁盤的過程,然后把消息返回給發(fā)送者端. - 消息隊列(消息持久化)
申明交換機持久化和隊列持久化
rabbitmq接收到消息,會把消息從內存刷到磁盤的存儲文件中. - 消費者
設置消息的ack,當消費者消費一個消息的時候,會返回給rabbitmq對應queue一個ack消息,這樣就保證了消息消費完成.