【LSP】rabbitmq(生命周期,confirm模式,延迟队

[复制链接]
查看1965 | 回复4 | 2020-12-5 22:29:09 | 显示全部楼层 |阅读模式


什么是消息队列?

就是生产者生产一条消息,发送到这个rabbitmq,消费者连接rabbitmq并且进行消费,生产者和消费者并需要知道对方是如何工作的,从而实现程序之间的解耦,异步和削峰,这也就是消息队列的作用。

使用的场景也有很多,比如用户支付购买之后的发送短信,增加用户积分等等,只要能将业务逻辑抽象出来,就能很好得使用它。



下面进入正题:

先来介绍一下基本概念和参与生命周期的各个成员。

publisher:消息生产者,负责创建消息,并发送到代理服务器(rabbitmq)

message:发送的消息,由 有效负载(payload) 和 标签 (label) 组成

exchange:交换器,负责接收消息并路由给服务器的队列

queue:消息队列,就是消息最后要去的地方。然后等待消费者取走并消费

consumer:消息消费者,与生产者对应,程序的另外一方,负责消费信息,并完成相应的业务逻辑

channel:信道,在tcp之上建立的通道,负责传送消息。队列的传输都是基于信道来完成的。

broker:消息队列服务器实体

下面来解析一下这张图,这张图是网上找的,虽然不够详细,但是勉强能用。




准备前提,开启rabbitmq服务,生命队列和交换器,并将两者进行绑定。



生产逻辑:

publisher 通过 broker服务器ip 和 端口 尝试建立与 broker 的 tcp 连接,连接成功之后,会尝试验证验证用户名和密码,如果错误,则拒绝访问。

验证成功之后,在tcp上建立一个 信道(channel) ,publisher 通过信道,发送消息到 broker,进入指定的虚拟主机virtual host。然后查找到交换器绑定的队列,并将消息推送进入队列。



消费逻辑:

consumer 建立连接和验证和生产者一样。接下来通过队列名,直接找到队列进行监听并消费。



有几个比较重要的知识点:

1.  rabbitmq的交换器并不是真正意义的交换器,它本质上其实就是一张表,里面存放和交换器名称和消息队列的映射关系。所以说队列的传输都是通过信道来完成的。

2.  信道存在的意义在于 创建和销毁tcp连接非常消耗资源





交换器的类型

当生产的消息进入虚拟主机时,会去寻找一张表,就是交换器和队列映射关系的一张表。而交换器的类型也分了好多种,可以根据不同的场景自由选择。

目前总共分了4种,direct,fanout,topic,headers。其中headers因为性能问题几乎不在使用,这里就不做过多的讨论。

1.direct

direct是直接,完全匹配,单播的模式。

php简单代码实现:
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
伴我多久 | 2020-12-6 10:36:10 | 显示全部楼层
是爷们的娘们的都帮顶!大力支持
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

无量科技 | 2020-12-7 08:36:20 | 显示全部楼层
专业抢沙发的!哈哈
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

大司命 | 2020-12-7 15:52:58 | 显示全部楼层
顶顶更健康
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

68079330 | 2020-12-10 13:57:36 | 显示全部楼层
支持,赞一个
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则