RabbitMQ:基础,运行和管理

本文详述了RabbitMQ的基本概念、核心组件及其运行与管理方法,包括Broker、Exchange、Queue、Binding等关键元素的定义与工作原理,以及如何通过vhost、用户权限控制和消息持久化策略进行高效管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在本章中我们来学习一下RabbitMQ的基础知识以及相关的相关运行和管理。
RabbitMQ是一个高性能的工业级的AMQP协议、使用erlang语言创建的开源的消息服务器,可以同步或异步发送或接受消息。

[size=large][color=blue]RabbitMQ基础知识[/color][/size]
[color=red][b]Broker:[/b][/color]简单来说就是消息队列服务器实体,可以把一个rabbitmq server当作一个broker。
[color=red][b]Exchange交换机:[/b][/color]
Exchange负责对消息进行路由,是一个路由规则。当收到 Publisher 传递给它的消息后,Exchange会根据路由键routing_key决定将消息加入到哪些消息队列中。
RabbitMQ有四种类型的exchange:direct,fanout,topic,headers,经常使用的是下面三种:
[color=green][b]Direct Exchange:[/b][/color]处理路由键,使用一个固定字符串作为路由键routing_key,若exchange和message queue 绑定的key和routing_key一样时,消息会被路由到绑定的这个 message queue中。
[img]http://dl2.iteye.com/upload/attachment/0087/2609/67a8ac2f-cc2a-3746-974a-2d52fd9af038.png[/img]
[color=green][b]Fanout Exchange:[/b][/color]不处理路由键,会将发布的消息路由到该注册Exchange的所有的message queue中,和ActiveMQ的发布订阅模式很像。
[img]http://dl2.iteye.com/upload/attachment/0087/2611/ce19102c-9f9e-3db8-8bb9-02c656b716fc.png[/img]
[color=green][b]Topic Exchange:[/b][/color]主题交换类型,routing key 中可以包括通配符。这里使用的通配符主要是"*"和"#",比如用户生名了两个queue: Q1(routing_key="rk.*")和Q2(routing_key="rk.#"),现在有人向Q1和Q2所绑定的topic exchange发布了2条消息,routing_key分别为"rk.1"和"rk.m.2",那么Q1只能接受到rk.1的这条消息,而Q2则可接受到这两条消息。
通配符:* 表示一个词 # 表示0个或多个词。
[img]http://dl2.iteye.com/upload/attachment/0087/2613/d16a84df-416b-36a9-b1da-4b6b9435d4dc.png[/img]
[color=red][b]Queue队列:[/b][/color]
消息队列载体,每个消息都会被投入到一个或多个队列。
[color=red][b]Binding绑定:[/b][/color]
它的作用就是把exchange和queue按照路由规则绑定起来。
[color=red][b]vhost虚拟主机:[/b][/color]
一个broker里可以开设多个vhost,用作不同用户的权限分离,也可以把他看作明名空间。
[color=red][b]Routing_Key路由关键字:[/b][/color]exchange根据这个关键字进行消息投递。
[color=red][b]Channele消息通道:[/b][/color]在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

[color=violet][b]持久化消息和非持久化消息[/b][/color]
默认情况下,用户发送的消息是非持久化的,也就是说如果要接收消息的rabbitmq server宕机——在没有被消费者接收处理之前,重新启动后消息将不存在,及消息会丢失。
在学习如何将消息“装配”成持久化消息之前,我们先看一下Exchange和Queue的类型。实际上rabbitmq中的交换机Exchange和消息队列Queue都分为持久化和非持久化的两种类型,当然消息Message也分为持久化和非持久化的,并且在默认情况下都是非持久化的。也就是说默认情况下用户创建的exchange、queue在服务器重启后都将不存在——服务器不会重建(re-create),消息也会lost,其元数据信息回报存在服务器的内存中而非写道服务器的磁盘上。
如果用户想要发布持久化的消息,那么需要满足一下3个条件:
1、将消息发布模式选项设置为2;
2、将消息发布到一个持久化的exchange;
3、消息最终保存到一个持久化的queue。
但是,持久化的消息相对于非持久化的消息来说,服务器性能麾下将很多。

[color=violet][b]消息生产者如何确认消息发布成功呢?[/b][/color]
默认情况下,当用户也即消息生产者将消息发不出去后,会发生什么事情呢?答案是什么也不会发生——对用户来说。这也就是说,消息发布后,就没有消息生产者什么事儿了,用户就不知道消息是发布成功了还是失败了。
那么,如果用户也即消息生产者想要知道自己是否成功发送消息的话,可以使用“transations”和“publisher confirms”这两种方式来处理消息发送。transations,也就是事务——就像是传统数据库中的事务,提交后会给发布者返回发布是否成功的信息。publisher confirms和transations都会接收到消息是否发布成功的信息,两者不同的是,transations是同步的,而publisher confirms方式是异步的。

[size=large][color=blue]RabbitMQ运行和管理[/color][/size]
下面是一些常用的rabbitmq启动和停止操作:[quote]
[color=blue]# cd /opt/mq/rabbitmq/sbin
# ./rabbitmq-server //启动服务器
# ./rabbitmqctl start_app //启动application
# ./rabbitmqctl stop //停止服务器
# ./rabbitmqctl stop_app //停止application[/color]
[/quote]
[img]http://dl2.iteye.com/upload/attachment/0087/2623/ddab1e8b-3bda-3fe8-924d-090ccc1d2378.png[/img]
常用的rabbitmq服务管理操作:[quote]
[color=blue]# ./rabbitmqctl list_vhosts //查看当前rabbitmq上的vhost列表
# ./rabbitmqctl add_vhost demo //添加名为"demo"的vhost虚拟主机
# ./rabbitmqctl delete_vhost demo //删除名为"demo"的vhost虚拟主机

# ./rabbitmqctl list_users //查看当前rabbitmq上的user列表
# ./rabbitmqctl add_user test test //添加test用户并将密码设置为test
# ./rabbitmqctl delete_user test //删除test用户
# ./rabbitmqctl change_password test test2 //将test用户的密码修改为test2
# ./rabbitmqctl clear_password test //清除test用户的密码

//设置或修改用户权限
# ./rabbitmqctl set_permissions -p demo test ".*" ".*" ".*"
-p demo:demo虚拟主机
test:要赋予权限的用户,即给用户test在demo虚拟主机上赋予权限
".*" ".*" ".*":用户test在demo虚拟主机上赋予权限,按顺序为configure(配置)、write(写)和read(读)的权限
".*"表示米陪任何exchange和queue;""表示不匹配任何的exchange和queue;另外还有另外一种匹配方式——正则式匹配,如"checker-*"表示匹配任何以checker-开头的任何的exchange和queue。
# ./rabbitmqctl list_permissions -p demo //查看demo虚拟主机上用户权限列表
# ./rabbitmqctl list_user_permissions test //查看test用户在所有虚拟主机的配置权限列表
# ./rabbitmqctl clear_permissions -p demo test //删除demo虚拟主机上test用户的权限

# ./rabbitmqctl list_queues
# ./rabbitmqctl list_queues -p demo
# ./rabbitmqctl list_queues name durable auto_delete //查看队列详细信息:名字 是否持久化 是否自动删除

# ./rabbitmqctl list_exchanges
# ./rabbitmqctl list_exchanges -p demo

# ./rabbitmqctl list_bindings
# ./rabbitmqctl list_bindings -p demo

# ./rabbitmqctl list_consumers
# ./rabbitmqctl list_consumers -p demo

# ./rabbitmqctl status
# ./rabbitmqctl report
[/color]
[/quote]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值