安装(CentOS):
1. 准备依赖环境
yum install -y build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz
2. 安装erlang, socat, rabbitmq
wget www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm
wget http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm
wget www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm
rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
rpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpm
rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
3. 修改配置文件
vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app
比如修改密码、配置等等,例如:loopback_users 中的 <<“guest”>>,只保留guest
4. 启动 RabbitMQ
启动:rabbitmq-server start &
停止:rabbitmqctl app_stop
管理插件: rabbitmq-plugins enable rabbitmq_management
访问地址:http://192.168.10.127:15672/
默认用户: guest
密码: guest
验证rabbitmq是否启动
lsof -i:5672
// lsof -i :22 知道22端口被哪个进程占用
netstat -lnp|grep 7000
查看7000端口被哪个进程占用
RabbitMQ 管理命令
1. 启动、停止
- 服务的启动:
rabbitmq-server start &
- 服务的停止:
rabbitmqctl stop_app
2. 插件管理
- 查看插件列表:
rabbitmq-plugins list
- 安装管理插件:
rabbitmq-plugins enable rabbitmq_management
- 卸载管理插件:
rabbitmq-plugins disable rabbitmq_management
- 访问地址:
http://192.168.11.76:15672
- 日子文件路径:
/var/log/rabbitmq/rabbit@localhost.log
/var/log/rabbitmq/rabbit@localhost-sasl.log
- 路径:
/usr/local/software
- 验证rabbitmq是否启动
lsof -i:5672
// lsof -i :22 知道22端口被哪个进程占用
netstat -lnp|grep 7000
查看7000端口被哪个进程占用
3. 管理
- 关闭应用:
rabbitmqctl stop_app
- 启动应用:
rabbitmqctl start_app
- 节点状态:
rabbitmqctl status
- 添加用户:
rabbitmqctl add_user username password
- 列出所有用户:
rabbitmqctl list_users
- 删除用户:
rabbitmqctl delete_user username
- 清除用户权限:
rabbitmqctl clear_permissisons -p vhostpath username
- 列出用户权限:
rabbitmqctl list_user_permissions username
- 修改密码:
rabbitmqctl change_password username newpassword
- 设置用户权限:
rabbitmqctl set_permissions -p vhostpath username
- 创建虚拟主机:
rabbitmqctl add_vhost vhostpath
- 列出所有虚拟主机:
rabbitmqctl list_vhosts
- 列出虚拟主机上所有权限:
rabbitmqctl list_permissions -p vhostpath
- 删除虚拟主机:
rabbitmqctl delete_vhost vhostpath
- 查看所有队列:
rabbitmqctl list_queues
- 清除队列里的消息:
rabbitmqctl -p vhostpath purge_queue blue
高级操作
- 移除所有数据,要在rabbitmqctl stop_app 之后使用:
rabbitmqctl reset
- 组成集群命令:
rabbitmqctl join_cluster <clusternode> [--ram]
- 查看集群状态:
rabbitmqctl cluster_status
- 修改集群节点的存储形式:
rabbitmqctl change_cluster_node_type disc | ram
- 忘记节点(摘除节点):
rabbitmqctl forget_cluster_node [--offline]
- 修改节点名称:
rabbitmqctl rename_cluster_node oldnode1 newnode1 [oldnode2] [newnode2 ...]
急速入门–消息生产与消费
- ConnectionFactory: 获取连接工厂
- Connection: 一个连接
- Channel: 数据通信信道,已发送和接收消息
- Queue: 具体的消息存储队列
- Producer & Consumer 生产和消费者
Exchange 交换机
Exchange: 接收消息,并根据路由建转发消息所绑定的队列
交换机属性
- Name: 交换机名称
- Type: 交换机类型 direct , topic, fanout, headers
- Durability: 是否需要持久化,true为持久化
- Atuto Delete: 当最后一个绑定到Exchange 上的队列删除后,自动删除该Exchange
- internal: 当前Exchange 是否用于RabbitMQ 内部使用,默认为False
- Arguments: 扩展参数,用于扩展AMQP 协议自定化使用
交换机类型
- Direct Exchange : 所有发送到Direct Exchange 的消息被转发到RouteKey中指定的Queue
注意: Direct 模式可以使用RabbitMQ自带的Exchange:default Exchange,所以不需要将Exchange进行任何绑定(binding)操作,消息传递时,RouteKey必须完全匹配才会被队列接收,否则该消息会被抛弃。
- Topic Exchange
任何发送到Topic Exchange的消息都会被转发到所有关心routing_key中指定话题的Queue上- 这种模式较为复杂,简单来说,就是每个队列都有其关心的主题,所有的消息都带有一个“标题”(routing_key),Exchange会将消息转发到所有关注主题能与routing_key模糊匹配的队列。
- 这种模式需要routing_key,也许要提前绑定Exchange与Queue。
- 在进行绑定时,要提供一个该队列关心的主题,如“#.log.#”表示该队列关心所有涉及log的消息(一个routing_key为”MQ.log.error”的消息会被转发到该队列)。
- “#”表示0个或若干个关键字,“”表示一个关键字。如“log.”能与“log.warn”匹配,无法与“log.warn.timeout”匹配;但是“log.#”能与上述两者匹配。
- 同样,如果Exchange没有发现能够与routing_key匹配的Queue,则会抛弃此消息。
- Fanout Exchange