名词解释
1、基础模块
要熟练使用Rabbitmq就必须知道其名词含义和工作机制
基本流程
基本的工作流程是这样的:生产者,就是你的发送程序,通过TCP连接,创建channel(通道)向指定的exchange(交换机)发送一个消息,exchange再将消息下发到binding(绑定)的queue(队列)中,然后消费者(处理程序)监听接收queue中的消息进行处理。
这是google的一张流程图
生产者,消费者
即发送消息和接收处理消息的逻辑程序
Channel
通道,rabbitmq的本质是tcp通信,利用tcp连接创建内部的逻辑连接,注意,此通道不是tcp本身通道(tcp一个连接就是一个通道),而是共享一个tcp连接的其内部实现的连接,至于rabbitmq内部如何实现的我也没吃透,应该是用到了多路复用,总之rabbitmq一切收发都是通过channel实现的,避免了重复连接tcp产生的资源消耗。
Exchange
交换机,相当于是一个消息中转控制中心,负责接收消息然后根据路由规则将消息下发到指定的queue。
Queue
队列,即存放消息的地方,消费的时候直接从队列里取。
2、参数说明
Routing Key
路由键,是exchange跟queue之间的桥梁,exchange根据绑定的routing key下发消息到对应的queue中,决定了消息的流向,键名可以自定义。
Type
exchange的类型,有’fanout’、’direct’、’topic’、’headers’四个类型。
- fanout:不需要指定路由键,直接将消息发送给exchange中的所有queue,类似于广播。
- direct:将消息发给exchange中指定路由键的queue中,相当于精准投放。
- topic:匹配模式,消息下发到匹配规则的routing key的queue中,有’‘与’#’两个通配符,’‘表示只匹配一个词,’#’表示匹配多个,比如’user.*‘只能匹配到’user.name’而不能匹配到’user.name.wang’,’user.#’则都可以匹配到。
- headers:根据消息体的headers匹配,这种用到的比较少,绑定的时候指定相关header参数即可。
Durable
exchange跟queue都有这个参数,类型为boolean,表示是否持久化。
Auto delete
exchange跟queue都有这个参数,类型为boolean,我试了一下,当exchange绑定的queue全都解绑的时候exchange会自动删除,queue好像没什么影响。
Internal
exchange有这个参数,类型为boolean,内部的,意味着不能对这个exchange发送消息,通过管理后台还是可以发送消息的。
noWait
几乎每个步骤都有这个参数,类型为boolean,不需要服务器任何返回值的意思,指服务端创建队列发送消息等,rabbitmq不需要这个返回状态即可进行下一步,正常来说不会用到这个参数,容易报异常。
Exclusive
queue有这个参数,类型为boolean,排他队列,只对创建该队列的用户可见,其它用户无法访问。
延伸扩展
rabbitmq还提供了很多扩展参数,比如’x-message-ttl’给消息设置过时时间,’x-max-length-bytes’设置消息最大长度,’x-dead-letter-exchange’设置消息过时后推送到的exchange等等,具体的官方文档也提供了,也可以看管理后台创建exchange、queue的时候会有提示的额外参数。
引用这里:https://shuangdeyu.gitee.io/2019/04/16/%E5%9F%BA%E4%BA%8EGo%E7%9A%84Rabbitmq%E5%AE%9E%E8%B7%B5/