在本章中我们来学习一下RabbitMQ的基础知识以及相关的相关运行和管理。
RabbitMQ是一个高性能的工业级的AMQP协议、使用erlang语言创建的开源的消息服务器,可以同步或异步发送或接受消息。
RabbitMQ基础知识
Broker:简单来说就是消息队列服务器实体,可以把一个rabbitmq server当作一个broker。
Exchange交换机:
Exchange负责对消息进行路由,是一个路由规则。当收到 Publisher 传递给它的消息后,Exchange会根据路由键routing_key决定将消息加入到哪些消息队列中。
RabbitMQ有四种类型的exchange:direct,fanout,topic,headers,经常使用的是下面三种:
Direct Exchange:处理路由键,使用一个固定字符串作为路由键routing_key,若exchange和message queue 绑定的key和routing_key一样时,消息会被路由到绑定的这个 message queue中。
Fanout Exchange:不处理路由键,会将发布的消息路由到该注册Exchange的所有的message queue中,和ActiveMQ的发布订阅模式很像。
Topic Exchange:主题交换类型,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个或多个词。
Queue队列:
消息队列载体,每个消息都会被投入到一个或多个队列。
Binding绑定:
它的作用就是把exchange和queue按照路由规则绑定起来。
vhost虚拟主机:
一个broker里可以开设多个vhost,用作不同用户的权限分离,也可以把他看作明名空间。
Routing_Key路由关键字:exchange根据这个关键字进行消息投递。
Channele消息通道:在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
持久化消息和非持久化消息
默认情况下,用户发送的消息是非持久化的,也就是说如果要接收消息的rabbitmq server宕机——在没有被消费者接收处理之前,重新启动后消息将不存在,及消息会丢失。
在学习如何将消息“装配”成持久化消息之前,我们先看一下Exchange和Queue的类型。实际上rabbitmq中的交换机Exchange和消息队列Queue都分为持久化和非持久化的两种类型,当然消息Message也分为持久化和非持久化的,并且在默认情况下都是非持久化的。也就是说默认情况下用户创建的exchange、queue在服务器重启后都将不存在——服务器不会重建(re-create),消息也会lost,其元数据信息回报存在服务器的内存中而非写道服务器的磁盘上。
如果用户想要发布持久化的消息,那么需要满足一下3个条件:
1、将消息发布模式选项设置为2;
2、将消息发布到一个持久化的exchange;
3、消息最终保存到一个持久化的queue。
但是,持久化的消息相对于非持久化的消息来说,服务器性能麾下将很多。
消息生产者如何确认消息发布成功呢?
默认情况下,当用户也即消息生产者将消息发不出去后,会发生什么事情呢?答案是什么也不会发生——对用户来说。这也就是说,消息发布后,就没有消息生产者什么事儿了,用户就不知道消息是发布成功了还是失败了。
那么,如果用户也即消息生产者想要知道自己是否成功发送消息的话,可以使用“transations”和“publisher confirms”这两种方式来处理消息发送。transations,也就是事务——就像是传统数据库中的事务,提交后会给发布者返回发布是否成功的信息。publisher confirms和transations都会接收到消息是否发布成功的信息,两者不同的是,transations是同步的,而publisher confirms方式是异步的。
RabbitMQ运行和管理
下面是一些常用的rabbitmq启动和停止操作:
引用
# cd /opt/mq/rabbitmq/sbin
# ./rabbitmq-server //启动服务器
# ./rabbitmqctl start_app //启动application
# ./rabbitmqctl stop //停止服务器
# ./rabbitmqctl stop_app //停止application
常用的rabbitmq服务管理操作:
引用
# ./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
- 大小: 34.5 KB
- 大小: 30.9 KB
- 大小: 36 KB
- 大小: 133.4 KB
分享到:
相关推荐
Erlang是RabbitMQ的基础,因为它提供了RabbitMQ运行所需的环境。这里以`erlang-18.3-1.el7.centos.x86_64.rpm`和`rabbitmq-server-3.6.5-1.noarch.rpm`为例,你可以通过`rpm -ivh`命令分别安装这两个软件包。 接着...
- **监控与日志**:通过RabbitMQ的监控工具和日志分析,确保服务的稳定运行。 - **性能优化**:调整配置参数,提高RabbitMQ的性能和吞吐量。 **7. 实战案例** - **微服务间通信**:在微服务架构中使用RabbitMQ进行...
安装完成后,可以通过命令行或Web管理界面启动和管理RabbitMQ服务,创建和配置交换器、队列、绑定,以及管理用户和权限。对于开发者来说,理解RabbitMQ的基本概念如生产者、消费者、队列、交换器和绑定至关重要,...
OTP_win64_26.2.2 是Erlang在Windows 64位平台上的版本,是运行RabbitMQ Server所必需的,因为RabbitMQ是用Erlang编写的。 **安装与配置** 1. **下载与安装Erlang**: 在安装RabbitMQ之前,首先需要下载并安装...
- Windows用户需运行`rabbitmq_server-3.8.3\sbin\rabbitmq-server.bat`启动服务。 4. **插件管理**:RabbitMQ的一些功能如Web管理界面(rabbitmq_management)默认可能未启用,可以通过命令行启用:`rabbitmq-...
安装Erlang OTP对RabbitMQ来说至关重要,因为它为RabbitMQ提供了运行的基础环境。例如,提供的`otp_win64_18.0.exe`文件就是Erlang OTP的Windows 64位版本安装包,用户需要根据自己的操作系统选择合适的版本进行安装...
在Windows上部署RabbitMQ之前,需要安装其基础依赖,其中包括Erlang OTP(Open Telephony Platform)运行环境。标题中的"otp_win64_20.3"是指Erlang OTP的64位Windows版本,版本号为20.3。这个版本是RabbitMQ在...
1. **RabbitMQ基础**:首先,书中会介绍RabbitMQ的基本概念,包括生产者、消费者、交换机、队列和绑定等关键元素。这些是理解RabbitMQ工作原理的基础。 2. **安装与配置**:详细阐述如何在不同的操作系统上安装...
在Linux环境中安装RabbitMQ,我们需要遵循一系列步骤,确保安装过程顺利并为后续的使用打下基础。 首先,为了安装RabbitMQ,我们的Linux系统应该已经更新到最新版本,并且安装了Erlang,因为RabbitMQ是用Erlang编程...
在本资源中,我们有两个安装包:RabbitMQ 3.12.10和Erlang 26.0.2,这两个是RabbitMQ运行所必需的组件。 Erlang是一种函数式编程语言,以其并发能力、容错性和热代码升级功能而闻名。在RabbitMQ中,Erlang作为基础...
Erlang提供了RabbitMQ运行所需的所有基础工具和库。你可以从Erlang Solutions官网下载适用于macOS的Erlang OTP(Open Telecom Platform)版本。确保下载的Erlang版本与RabbitMQ兼容,因为不同版本的RabbitMQ可能需要...
**RabbitMQ基础介绍** RabbitMQ是一款开源的消息队列系统,它基于AMQP(Advanced Message Queuing Protocol)协议,广泛应用于分布式系统中,用于处理异步任务、解耦组件以及实现消息通信。RabbitMQ由 Erlang 语言...
在使用过程中,了解如何管理和监控RabbitMQ至关重要,包括如何创建和删除队列、绑定和交换、查看队列状态以及使用RabbitMQ管理界面。此外,熟悉Erlang的并发模型和错误处理机制也有助于更好地理解和调试RabbitMQ相关...
**RabbitMQ基础** RabbitMQ是一个开源的消息队列系统,基于AMQP(Advanced Message Queuing Protocol)协议,用于在分布式系统中实现可靠的消息传递。它允许应用程序通过发送消息进行异步通信,从而提高系统的可...
Erlang是RabbitMQ的基础,首先需要下载Erlang的RPM包。在提供的压缩包中,我们找到了`erlang-18.1-1.el6.x86_64.rpm`这个文件。可以按照以下步骤安装: 1. 打开终端。 2. 使用`cd`命令将当前目录切换到RPM包所在的...
Akka-RabbitMQ是将RabbitMQ消息队列服务与Scala...通过Akka-RabbitMQ,开发者可以利用Akka的强大力量来构建可靠的、分布式的消息驱动系统,与RabbitMQ的稳定性和灵活性相结合,为复杂的企业级应用提供健壮的基础设施。
- 插件管理:RabbitMQ的许多功能通过插件实现,如管理控制台,可以使用`rabbitmq-plugins enable rabbitmq_management`启用。 6. **安全与访问控制**:默认情况下,RabbitMQ的管理控制台是关闭的,可以通过`...
`otp_win64_20.2.exe` 是Erlang OTP(Open Telecom Platform)的Windows 64位版本,它是RabbitMQ运行的基础环境,因为RabbitMQ是用Erlang编写的。Erlang是一种并发性强、容错性高的编程语言,特别适合构建分布式系统...
总结,尽管Windows XP系统已经过时,但通过选择合适的Erlang和RabbitMQ版本,以及正确配置和管理,依然可以在这种环境下运行这些工具。然而,强烈建议升级到更新的操作系统以获得更好的安全性和性能。