RabbitMq学习贴
近期阅读了一些网友写的关于RabbitMq的文章,整理下来:
消息队列的初认识:
https://my.oschina.net/u/3229047/blog/839213
http://blog.csdn.net/anzhsoft/article/details/19563091
exchange模式的介绍
http://www.cnblogs.com/zhangweizhong/p/5713874.html
消息队列的持久化分析
http://backend.blog.163.com/blog/static/20229412620132251132788
AMQP协议中的核心思想就是生产者和消费者隔离,生产者从不直接将消息发送给队列。生产者通常不知道是否一个消息会被发送到队列中,只是将消息发送到一个交换机。先由Exchange来接收,然后Exchange按照特定的策略转发到Queue进行存储。同理,消费者也是如此。
RabbitMQ是AMQP的开源实现。
主要涉及的概念:
虚拟主机 virtual host
交换机 exchange
队列 queue
绑定 binding
路由键 routing-key
Connection:就是一个TCP的连接。Producer和Consumer都是通过TCP连接到RabbitMQ Server的。
Channels:虚拟连接。它建立在上述的TCP连接中。数据流动都是在Channel中进行的。也就是说,一般情况是程序起始建立TCP连接,第二步就是建立这个Channel。对于Producer或者Consumer来说,一个TCP连接可以并发的使用多个Channel进行Publish或者Receive。
ack: 确认Message的正确传递
RabbitMq中有多个虚拟主机,一个虚拟主机有一组交换机,队列和绑定
exchange和queue通过routing-key关联,这两者之间的关系是就是binding。路由键exchange,该交换机收到消息后会把消息发送到指定routing-key的queue中。
有四种类型的Exchanges:
Default Exchange: 这种是特殊的Direct Exchange,是rabbitmq内部默认的一个交换机。如果 routing key 匹配, 那么Message就会被传递到相应的queue中。其实在queue创建时,它会自动的以queue的名字作为routing key来绑定那个exchange。
Direct ExchangeTopic Exchange交换机: 对key进行模式匹配,比如ab可以传递到所有ab的queue。
Topic ExchangeFanout Exchange交换机: 会向响应的queue广播。
广播方式header Exchange: 少用