RabbitMQ基础教程

时光总嘲笑我的痴心妄想 提交于 2019-11-30 21:25:02

下载和安装(3.6版本)

rabbitmq和erlang的版本关系,2者版本必须要一致,不然各种问题
https://www.rabbitmq.com/which-erlang.html

我装的rabbitmq的版本是3.6.10
erlang的版本是19.3
下载erlang

wget http://erlang.org/download/otp_src_19.3.tar.gz
tar -xvf otp_src_19.3.tar.gz
cd otp_src_19.3
./configure --prefix=/opt/soft/erlang
make
make install

配置环境变量

vim /etc/profile
export ERLANG_HOME=/opt/soft/erlang
export PATH=$PATH:$ERLANG_HOME/bin
source /etc/profile

验证是否正常安装,正常输出版本则正确

[root@VM_0_14_centos soft]# erl
Erlang/OTP 19 [erts-8.3] [source] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V8.3  (abort with ^G)
1>

下载rabbitmq

wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-generic-unix-3.6.10.tar.xz
tar -Jxf rabbitmq-server-generic-unix-3.6.10.tar.xz
mv rabbitmq_server-3.6.10 rabbitmq

配置环境变量

vim /etc/profile
export PATH=$PATH:/opt/soft/rabbitmq/sbin
export RABBITMQ_HOME=/opt/soft/rabbitmq
source /etc/profile

修改配置文件

vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.5.0/ebin/rabbit.app
// ./loopback_users,将loopback_users属性设置为如下内容
{loopback_users,["guest"]},

操作

# 后台启动
rabbitmq-server -detached
# 查看集群状态(单机也行)
rabbitmqctl cluster_status
# 管理插件(启动管控台页面)
rabbitmq-plugins enable rabbitmq_management
# 访问地址
ip:15672 
# 关机
rabbitmqctl stop_app

添加用户

默认用户名和密码都是guest,默认只能通过本地网络访问,远程网络访问受限

添加用户名为root,密码为root

rabbitmqctl add_user root root

为root用户设置所有权限

rabbitmqctl set_permissions -p /root ".*" ".*" ".*"

设置root用户为管理员角色

rabbitmqctl set_user_tags root administrator

基础知识

发送消息的时候指定RoutingKey
将Exchange和Queue绑定的时候指定BindingKey,当RoutingKey被用于绑定的时候可以叫做BindingKey,方便文字描述

Exchange

Exchange:接收消息,并根据路由键转发消息到所绑定的队列

在这里插入图片描述

交换机属性 类型
Name 交换机名称
Type 交换机类型direct,topic,fanout,headers
Durability 是否需要持久化,true为持久化
Atuo Delete 当最后一个绑定到Exchange上的队列删除后,自动删除该Exchange
Internal 当前Exchange是否用于RabbitMQ内部使用,默认为False

Direct Exchange

这里写图片描述

所有发送到Direct Exchange的消息都被转发到RouteKey中指定的Queue
注意:Direct模式可以使用RabbitMQ自带的Exchange:default Exchange,所以不需要将Exchange进行绑定(binding)操作,消息传递时,RouteKey必须完全匹配才会被队列接收,否则该消息会被抛弃

Topic Exchange
这里写图片描述

所有发送到Topic Exchange的消息被转发到所有关心RouteKey中指定Topic的Queue上,Exchange将RouteKey和某Topic进行模糊匹配,此时队列需要绑定一个Topic

注意:可以使用通配符进行模糊匹配
#匹配一个词或多个词
*匹配不多不少一个词
log.# 能够匹配道log.info.oa
log.*能够匹配到log.error

Fanout Exchange
这里写图片描述

不处理路由键,只需要简单的将队列绑定到交换机上
发送到交换机的消息都会被转发到与该交换机绑定的所有队列上
Fanout交换机转发消息是最快的

Message

服务器和应用程序之间传送的数据,本质上就是一段数据,由Properties和Payload(Body)组成

常用属性:delivery mode,headers(自定义属性)
其他属性:
content_type content_encoding priority
correlation_id reply_to expiration message_id
timestamp type user_id app_id cluster_id

Virtual host-虚拟主机

虚拟地址,用于进行逻辑隔离,最上层的消息路由
一个Virtual Host 里面可以有若干个Exchange和Queue
同一个Virtual Host里面不能有相同名称的Exchange或Queue

各种Listener

returnListener
当发布消息且无匹配的队列时消息被返回给接收者

队列

临时队列
永久队列

参数名 目的
x-dead-letter-exchange 死信交换器
x-dead-letter-routing-key 死信消息的可选路由键
x-expires 队列在指定毫秒数后被删除
x-ha-policy 创建HA队列
x-ha-nodes HA队列的分布节点
x-max-length 队列的最大消息数
x-message-ttl 毫秒为单位的消息过期时间,队列级别
x-max-priority 最大优先值为255的队列优先排序功能

消息

属性名 用处
content-type 消息体的MIME类型,如application/json
content-encoding 消息的编码类型,如是否压缩
message-id 消息的唯一性标识,由应用进行设置
correlaltion-id 一般用作关联消息的message-id,常用于消息的响应
timestamp 消息的创建时刻,整型,精确到秒
expiration 消息的过期时刻,字符串,但是呈现格式为整型,精确到秒
delivery-mode 消息的持久化类型 ,1为非持久化,2为持久化,性能影响巨大
app-id 应用程序的类型和版本号
user-id 标识已登录用户,极少使用
type 消息类型名称,完全由应用决定如何使用该字段
reply-to 构建回复消息的私有响应队列
headers 键/值对表,用户自定义任意的键和值
priority 指定队列中消息的优先级

管理RabbitMQ

用户管理

rabbitmqctl add_user [username][pwd]
rabbitmqctl delete_user [username]

用户权限控制

rabbitmqctl set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
# 如用户Mark在虚拟主机logHost上的所有权限
rabbitmqctl set_permissions -p logHost Mark ".*" ".*" ".*"

查看队列

rabbitmqctl list_queues

查看交换器

rabbitmqctl list_exchanges

查看绑定

rabbitmqctl list_bindings

参考博客

[1]https://blog.csdn.net/lswnew/article/details/79189074
[2]https://www.jianshu.com/p/ce725e41edab

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!