一条消息的产生到消费:
生产者发送一条消息时,先和RabblitMQ直接建立一条通道(channl),通过channl将消息发送到交换器,
交换器通过特定的路由规则routing_key,将消息转发到特定的队列上。
RabblitMQ会监听该队列,一旦有消费者订阅该队列,则将消息发送给该消费者处理,然后将消息从消息队列中删除
RabbitMQ 基础命令
Virtual_host管理
新建:rabbitmqctl add_vhost xxx
撤销: rabbitmqctl delete_vhost xxx
用户管理:
新建用户:rabbitmqctl add_user usernamexxx pwdxxx
删除用户:rabbitmqctl delete_user usernamexxx
修改密码:rabbitmqctl change_password {username} {newpassword}
设置用户角色:rabbitmqctl set_user_tags {username} {tag...}
tag 可以为: administrator, monitoring, management
rabbitmqctl set_permissions -p / username ".*" ".*" ".*" //添加权限
rabbitmqctl set_user_tags username administrator //修改用户角色
权限设置说明:rabbitmqctl set_permissions [-pvhostpath] {user} {conf} {write} {read}
Vhostpath:Vhost路径。
user:用户名。
Conf:一个正则表达式match哪些配置资源能够被该用户访问。
Write:一个正则表达式match哪些配置资源能够被该用户读。
Read:一个正则表达式match哪些配置资源能够被该用户访问。
清除所有队列:rabbitmqctl reset
查看队列信息:rabblimqctl list_queues
可以直接运行rabbitmqctl 来管理自己的mq节点,也可以指定-n rabbit@[servername]来管理远程节点
servername可以是ip或者域名
队列和交换器的durable 属性默认false ,断电重启之后重新创建队列,消息丢失,将它设置为true可以不
用重新建队列
持久化消息:能从服务器崩溃中恢复消息
(1)消息发布前,将它的投递模式设置为2标记持久化
(2)发送到持久的交换器
(3)并投放到持久化队列
恢复:写入磁盘上的持久化文件,rabbit会在消息提交到日志后才发送响应,但若消息路由到了
非持久化队列,RQM会自动从持久性日志删除,并无法在重启中自动恢复。
exchange 交换机和绑定routing key
exchange 的作用就是类似路由器,routing key 就是路由键,服务器会根据路由键
将消息从交换机路由到队列上去。
exchange 有多个种类,direct、fanout、topict、header(非路由键匹配,功能和direct类
似,很少用。)前三种类似集合对应关系那样,(direct) 1:1, (fanout) 1:N
(topic) N:1
direct 1:1 类似完全匹配。
fanout 1:N可以把一个消息并行到多个队列,当多个队列绑定到fanout的交换器
,那么交换器一次性拷贝多个消息分别发送到绑定的队列上,每个队列有这个消息的副本。