概念
消息队列,消息代理,队列服务器,高性能,
AMQP高级消息协议,
Erlang语言:不支持动态扩展,初衷理念抗高并发
核心概念
整体架构
消息如何流转
安装和使用
具体步骤百度
消息的生产者和消费者 (版本不同,写法不同,参考即可)
producer
consumer
或者
交换机 Exchange
接受消息,通过路由键传到相应队列中,本身没有存储消息的功能,如果没有消费队列绑定,消息就会丢失
type
Direct Exchange 直连交换机
作用:一对一模式, 发送到路由键指定的queue中
Topic Exchange 主题交换机
作用: 消息会被发送到指定主题相关的queue队列上(类似模糊匹配)
( # 匹配一个或者多个词,hello.# hello.gir.cole)
( * 匹配一个词 hello.* hello.gir.cole)
Fanout Exchange 广播交换机
不走路由键,直接将队列绑定到交换机上
发送到交换机的消息,全都会被转发到与该交换机绑定的队列上
转发消息是最快的
常见属性
auto delete 自动删除
1 当exchange上所有队列都删除了,exchange也自动删除
2 在队列上,找不到关联的交换机,队列也要被清除
internal
当前exchange是否只在rabbitMq内部使用, 默认false即可
arguments
扩展参数
queue队列 ,Binding绑定,Virtual Host虚拟主机,Message消息
Binding绑定
绑定exchange和queue之间的连接关系
queue队列
消息队列,存储消息数据,
存储状态,durable 是 永久存储,transient 否 内存
messgae消息
Virtual Host虚拟主机
队列模式
1点对点(简单)的队列
一对一模式 一个生产者投递消息给队列,只能允许一个消费者进行消费,如果消费集群,默认会进行均摊消费(均摊borker会有效率快慢)
队列以先进先出原则进行存放。
1)应答模式
手动:当队列把消息推送给consumer后成功后,逻辑业务处理完,手动进行应答处理
自动:当队列把消息推送给consumer后不管是否成功会自动进行应答,告诉队列删除消息
2 工作队列
跟均摊相反的 又称为能者多劳,效率高的消费者分配的多一些
原理:
basicQos方法 参数prefetchCount=1 这样mq就不会再同一时间发送超过1条消息给consumer, 消息发送后,consumer采用手动应答,consumer没有消费完毕返回ack, 就不会给consumer发送下一条消息。
3 发布订阅模式
生产者投递消息给交换机exchange,不会直接给队列queue,交换机通过路由策略RoutingKey 转发到不同的队列服务器中存放,队列再以推送或消费者拉取的模式进行消费
通过广播交换机进行发布订阅模式
好文推荐:https://mp.weixin.qq.com/s/oZophDWy1rELBs9BDLJK9A