【LSP】rabbitmq(生命周期,confirm模式,延迟队
http://cdn.u1.huluxia.com/g4/M01/5A/EB/rBAAdl9u2DmARnudAACt4WdlvYs557.jpg
什么是消息队列?
就是生产者生产一条消息,发送到这个rabbitmq,消费者连接rabbitmq并且进行消费,生产者和消费者并需要知道对方是如何工作的,从而实现程序之间的解耦,异步和削峰,这也就是消息队列的作用。
使用的场景也有很多,比如用户支付购买之后的发送短信,增加用户积分等等,只要能将业务逻辑抽象出来,就能很好得使用它。
下面进入正题:
先来介绍一下基本概念和参与生命周期的各个成员。
publisher:消息生产者,负责创建消息,并发送到代理服务器(rabbitmq)
message:发送的消息,由 有效负载(payload) 和 标签 (label) 组成
exchange:交换器,负责接收消息并路由给服务器的队列
queue:消息队列,就是消息最后要去的地方。然后等待消费者取走并消费
consumer:消息消费者,与生产者对应,程序的另外一方,负责消费信息,并完成相应的业务逻辑
channel:信道,在tcp之上建立的通道,负责传送消息。队列的传输都是基于信道来完成的。
broker:消息队列服务器实体
下面来解析一下这张图,这张图是网上找的,虽然不够详细,但是勉强能用。
http://cdn.u1.huluxia.com/g4/M01/5A/EB/rBAAdl9u2DqADhkMAADWAtEtSj0063.png
准备前提,开启rabbitmq服务,生命队列和交换器,并将两者进行绑定。
生产逻辑:
publisher 通过 broker服务器ip 和 端口 尝试建立与 broker 的 tcp 连接,连接成功之后,会尝试验证验证用户名和密码,如果错误,则拒绝访问。
验证成功之后,在tcp上建立一个 信道(channel) ,publisher 通过信道,发送消息到 broker,进入指定的虚拟主机virtual host。然后查找到交换器绑定的队列,并将消息推送进入队列。
http://cdn.u1.huluxia.com/g4/M01/5A/EB/rBAAdl9u2DqAAOuFAAEPfDCOPA4220.png
消费逻辑:
consumer 建立连接和验证和生产者一样。接下来通过队列名,直接找到队列进行监听并消费。
有几个比较重要的知识点:
1.rabbitmq的交换器并不是真正意义的交换器,它本质上其实就是一张表,里面存放和交换器名称和消息队列的映射关系。所以说队列的传输都是通过信道来完成的。
2.信道存在的意义在于 创建和销毁tcp连接非常消耗资源
交换器的类型
当生产的消息进入虚拟主机时,会去寻找一张表,就是交换器和队列映射关系的一张表。而交换器的类型也分了好多种,可以根据不同的场景自由选择。
目前总共分了4种,direct,fanout,topic,headers。其中headers因为性能问题几乎不在使用,这里就不做过多的讨论。
1.direct
direct是直接,完全匹配,单播的模式。
php简单代码实现:http://cdn.u1.huluxia.com/g4/M01/5A/EB/rBAAdl9u2DuAJl8NAAIRGcQa5Dk514.jpg
是爷们的娘们的都帮顶!大力支持 专业抢沙发的!哈哈 顶顶更健康 支持,赞一个
页:
[1]