最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

RabbitMQ

运维笔记admin13浏览0评论

RabbitMQ

RabbitMQ

RabbitMQRabbitMq基本组件⼀、 channel 信道:信道是⽣产消费者与rabbit通信的渠道,⽣产者publish或是消费者subscribe⼀个队列都是通过信道来通信的。信道是建⽴在TCP连接上的虚拟连接,什么意思呢?就是说rabbitmq在⼀条TCP上建⽴成百上千个信道来达到多个线程处理,这个TCP被多个线程共享,每个线程对应⼀个信道,信道在rabbit都有唯⼀的ID ,保证了信道私有性,对应上唯⼀的线程使⽤。怎么理解?和数据库连接池的连接类似。TCP连接不关闭,⽀持多次和mq服务端通信。疑问:为什么不建⽴多个TCP连接呢?原因是rabbit保证性能,系统为每个线程开辟⼀个TCP是⾮常消耗性能,每秒成百上千的建⽴销毁TCP会严重消耗系统。所以rabbitmq选择建⽴多个信道(建⽴在tcp的虚拟连接)连接到rabbit上。类似概念:TCP是电缆,信道就是⾥⾯的光纤,每个光纤都是独⽴的,互不影响。⼆、exchange 交换机和绑定routing keyexchange的作⽤就是类似路由器,routing key 就是路由键,服务器会根据路由键将消息从交换器路由到队列上去。exchange有多个种类:direct,fanout,topic,header(⾮路由键匹配,功能和direct类似,很少⽤)。前三种类似集合对应关系那样,(direct)1:1,(fanout)1:N,(topic)N:1direct: 1:1类似完全匹配fanout:1:N 可以把⼀个消息并⾏发布到多个队列上去,简单的说就是,当多个队列绑定到fanout的交换器,那么交换器⼀次性拷贝多个消息分别发送到绑定的队列上,每个队列有这个消息的副本。ps:这个可以在业务上实现并⾏处理多个任务,⽐如,⽤户上传图⽚功能,当消息到达交换器上,它可以同时路由到积分增加队列和其它队列上,达到并⾏处理的⽬的,并且易扩展,以后有什么并⾏任务的时候,直接绑定到fanout交换器不需求改动之前的代码。topic N:1 ,多个交换器可以路由消息到同⼀个队列。根据模糊匹配,⽐如⼀个队列的routing key 为*.test ,那么凡是到达交换器的消息中的routing key 后缀.test都被路由到这个队列上。三、结合信道、交换器和路由键到队列总结⼏点重要知识:1.信道才是rabbit通信本质,⽣产者和消费者都是通过信道完成消息⽣产消费的。2.交换器本质是⼀张路由查询表(名称和队列id,类似于hash表),这是⼀个虚拟出来的东西,并不存在真实的交换器。消息的⽣命周期:⽣产者⽣产消息A 交由信道,信道通过消息(消息由载体和标签)的标签(路由键)放到交换器发送到队列上(其实就是查询匹配,⼀旦匹配到了规则,信道就直接和队列产⽣连接,然后将消息发送过去)mq消息可靠性分析如何保证mq中的消息稳定可靠地被使⽤消费?1 消息从产⽣到被消费经过以下⼏步:mq消息的⼀⽣.png1 消息⽣产者产⽣发送到exchang2 交换机根据路由规则将消息转发到对应的队列上3 消息在队列上存储4 消费者consumer订阅队列queue进⾏消费如何保证上诉4步的可靠性⼀消息从⽣产者发出到交换机需要后 交换机要返回确认消息以保证 ⽣产者感知到消息是否正确发送到交换器中,如果失败,⽣产者可以进⼀步处理重新发送。确认机制1.开启事务RabbiMQ客户端与事务机制相关的⽅法有三个:

评论列表(0)

  1. 暂无评论