编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

rabbitMQ的使用场景(rabbitmq使用教程)

wxchong 2024-08-03 02:57:17 开源技术 13 ℃ 0 评论

一、rabbitMQ是什么:

RabbitMQ,遵循AMQP协议, 由内在高并发的erlanng语言开发, 用在实时的对可靠性要求比较高的消息传递上。

MQ: Message Queue, 消息队列(MQ)

rabbit [?r?b?t] 兔子

学过websocket的来理解rabbitMQ应该是非常简单的了, websocket是基于服务器和页面之间的通信协议, 一次握手, 多次通信。 而rabbitMQ就像是服务器之间的socket, 一个服务器连上MQ监听,

而另一个服务器只要通过MQ发送消息就能被监听服务器所接收。

但是MQ和socket还是有区别的, socket相当于是页面直接监听服务器。而MQ就是服务器之间的中转站, 例如邮箱, 一个人投递信件给邮箱, 另一个人去邮箱取, 他们中间没有直接的关系, 所以耦合度相比socket小了很多。

页面 ---websocket-- 服务器

服务器 ---rabbitMQ-- 服务器(最简单的MQ关系, 生产者-MQ队列-消费者)

二、MQ使用场景:

别啥固定式使用场景了, 说的透彻一点, 他就是服务器之间通信的, 前面博文中提到的Httpclient也可以做到, 但是这个相对于其他通信在中间做了一个中间仓库。

好处1:降低了两台服务器之间的耦合, 哪怕是一台服务器挂了, 另外一台服务器也不会报错或者休克, 反正他监听的是MQ, 只要服务器恢复再重新连上MQ发送消息, 监听服务器就能再次接收。

好处2:MQ作为一个仓库, 本身就提供了非常强大的功能, 例如不再是简单的一对一功能, 还能一对多, 多对一, 自己脑补保险箱场景, 只要有特定的密码, 谁都能存, 谁都能取。也就是说能实现群发消息和以此衍生的功能。 

三、专业术语介绍:

1. 生产者: 在现实生活中就好比制造商品的工厂, 他们是商品的生产者。生产者只意味着发送。发送消息的程序称之为一个生产者。

2. 队列:rabbitMQ就像一个仓库, 一个仓库里面可以有很多队列, 每个队列才是服务器之间消息通信的载体。

3. 消费者:消费者就好比是从商店购买或从仓库取走商品的人, 消费的意思就是接收。消费者是一个程序, 主要是等待接收消息。

4. 交换器:在生产者和消息队列之间的交换器, 功能类似于网络宽带的交换机, 可以根据不同的关键字, 将信息发送到不同的队列。 

5. 临时队列:根据需求临时创建的一条队列, 在断开连接后自动删除。

四、流程介绍:

  生产者发送一条消息给交换机——交换机根据关键字匹配到对应的队列——将消息存入队列——消费者从队列中取出消息使用。


五、一些细节说明

MQ不能进行批量的消息处理, 你看到的传输再多也只是消息被一条一条的存入队列, 消费者从队列中一条一条的取出。这kafKa有区别, 所以在效率上比不上kafKa, 但是MQ主打的是稳定。

每次消费者取出消息时会通知队列, 我拿到了, 当队列接收到这条消息, 就会把消息删除, 这是默认的ACK机制。

如果在接收消息之后, 消费者挂掉, 或者任何情况没有返回ack, 队列中这条消息将不会删除, 可以一直存着, 等待其他消费者来取。

注意, 但是如果设置不返回ack, 在不断的发送消息到队列又不删除, 会导致MQ仓库boom~~~


六、rabbitmq 命名规则

Exchange: uploadserver.trans

Queues: uploadserver.trans.oss

Routing key: oss


七、消息中间件如何选择?

rabbitmq | beanstalkd | kafka | activemq | redis 队列

性能、功能

redis 8w list模拟队列, 会丢失消息, 不支持延迟处理

kafka 8w 会保证消息的可靠性, 延迟处理, 优先级

beanstalkd 8w 大数据, 适合做日志处理, 极端情况下会丢失消息

rabbitmq 2-4w 保证消息的可靠性, 延迟处理, 优先级, 集群模式

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表