• 注册
当前位置:1313e > 默认分类 >正文

消息中间件RabbitMQ

  • 为什么需要,它能解决什么问题?

1异步:不等待

2解耦:任务的串行变并行

3流量削峰:大任务量负载均衡

  • 消息中间件有哪些?

 rabbitMQ,kafka,flume

AMQP: advanced message queue protocol

  • RabbitMQ的组成元素有哪些?

0 消息  分为消息头和消息体,消息头包含:路由键 routing-key,优先级priority,delivery-mode

1 生产者 producer 

2 broker 主机 可以有多个vhost

3 vhost 虚拟主机,可理解为一个小型的rabbitmq服务器,是一组交换机,队列,有相同的身份标识

4 交换机 exchange 用于区分type类型,(消息发布类型)将消息发送到不同的队列里

5 队列,queue 消息的载体 和交换机之间路由规则进行绑定,这里有一个设置binding-key

6 信道 消费者和队列间通信是通过tcp连接,但频繁连接性能差,就有了这个虚拟通道,它对应的是一个线程,更省资源

7 消费者

参考:https://www.jianshu.com/p/79ca08116d57

  • 消息的发布模式有那些?

消息如何正确的发送到对应的队列中呢?

消息本身有一个routing-key的标识,队列和交换机之间也有一个binding-key的标识

1 direct发布订阅模式:routing-key=binding-key  完全匹配,单播

2 fanout广播模式: 交换机的类型是fanout,发到这个交换机上的消息,就直接转发到跟这个交换机关联的所有队列里

3topic主题模式:此时的binding-key是一个模式  ,例如 usa.#,而 routing-key是一个具体的值 如usa.news, 这样就建立了模糊规则匹配

4 headers模式:只是标识放在了消息头中,其他和direct相同

 

这里的绑定,就是把队列和交换机做了绑定,指定了binding-key

 

 

对于生产者,通过指定交换机,routing-key,就确定了消息被发送到何处,哪个队列中

对于消费者,通过指定队列,交换机,binding-key就确定了消息的来源,获取消息后,还有一步确认动作:

确认又分为: (ACK确认机制,消费者处理完消息后,通知mq,mq才将其从队列中删除)

  手动确认

  自动确认

注意:如果mq收不到确认反馈,会再次将消息放到队列里,重复发送,严重的话会内存泄漏

不论是生产者发送消息,还是消费者处理消息,都存在不确定性,意外失败的情况,如何又要可靠,又要性能,兼顾呢?

  1事务开启--提交/回滚,

  2 confirm确认

这两种方式都是对chnnel信息进行相应的设置,等待,完成 监听

 

 

 

 

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录