下载和安装(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
来源:CSDN
作者:Java识堂
链接:https://blog.csdn.net/zzti_erlie/article/details/82706428