rabbitmq学习笔记
Posted mr.杰瑞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rabbitmq学习笔记相关的知识,希望对你有一定的参考价值。
rabbitmq
AMQP协议
- 生产者
- 消费者
- 队列
一个队列存多条消息 - 消息
- 连接
发消息和接收消息都是必须先建立连接 - 通道(channel)
一个连接有多个通道,消息会在通道里面流转,之后到达消费者 - 交换机(exchange)
路由的概念,通过绑定,和路由 - 路由键
交换机通过路由键去寻址,找到队列 - 绑定
队列和交换机的一个关联连接 - 用户
在RabbitMQ里,可以通过制定的用户名和密码来进行连接,每个用户可以分配不同的权限。读或者写或在实例里配置的权限
交换机类似mysql的数据库,queue对应的mysql的某张表
安装
- 首先安装erlang环境
新增/etc/yum.repos.d/rabbitmq_erlang.repo
在文件中添加下面内容
[rabbitmq_erlang]
name=rabbitmq_erlang
baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch
repo_gpgcheck=1
gpgcheck=1
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
[rabbitmq_erlang-source]
name=rabbitmq_erlang-source
baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
- yum install erlang
意思是源没有找到
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum -y install make gcc gcc-c++kernel-devel m4 ncurses-devel openssl-devel java-devel unixODBC-devel
wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
rpm --import http://packages.erlang-solutions.com/rpm/erlang_solutions.asc
上面操作就是换源,网上找的 之后再来一次
yum install erlang
判断是否安装完成
erl
ok
继续
- 安装rabbitmq 下载rpm包
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.1/rabbitmq-server-3.8.1-1.el7.noarch.rpm
安装
yum install rabbitmq-server-3.8.1-1.el7.noarch.rpm
安装完了
启动rabbitmq
rabbitmq-server start
加入开机自启项
chkconfig rabbitmq-server on
查看状态
rabbitmqctl status
启动web管理插件 支持浏览器访问rabbitmq
rabbitmq-plugins enable rabbitmq_management
设置操作系统字符集utf-8
vim /etc/profile
文件末尾加 export LC_ALL=en_US.UTF-8
然后执行
source /etc/profile
增加远程访问web管理后台用户及授权
rabbitmqctl add_user user root #增加user用户密码root
rabbitmqctl set_user_tags user administrator #添加user角色为administrator
#/指的是默认虚拟机
rabbitmqctl set_permissions -p "/" user ".*" ".*" ".*" #给user用户授权
rabbitmqctl list_users #查看用户是否已添加
本机ip+15672
如果访问不了可能是没有关闭防火墙
systemctl stop firewalld
docker中安装
主推这种,因为现在工作中都是用docker
如何使用
公司用到rabbitmq了,那咱们也要顺应时代学习一下子。
rabbitmq是啥?
我的认知就是它是个消息队列(先进先出),就比如老师布置了3个任务,写到了黑板上,先做完a任务,然后再做b任务,然后再做c任务。
那么小明依次完成了这三个任务,每完成一个就擦掉。那此时老师就是生产者,小明就是消费者,黑板就是rabbitmq
能削峰(不会让你一下干很多事),能异步,能解耦等等。
打开可视化界面 ip+端口号
channels通道
consumer.php
$config = [
'host'=>'127.0.0.1',//服务器的地址
'vhost'=>'/',//虚拟机 默认是/ (从控制台看 admin菜单 name)
'port'=>5672, //端口
'login'=>'root',
'password'=>'123456'
];
//连接broker 创建一个rabbitmq连接
$con = new AMQPConnection($config);//php 一个扩展
//判断是否连接上
if(!$con->connect())
exit("连接失败");
//在连接内创建一个通道
$ch = new AMQPChannel($con);
//通道下面 创建一个交换机
$ex = new AMQPExchange($ch);
//申明一个路由键
$routingKey = 'key_1';
//声明交换机名称
$exchangeName = 'exchange_1';
//设置交换机名称
$ex->setName($exchangeName);
//设置交换机类型 4种类型 下面用订阅模式
$ex->setType(AMQP_EX_TYPE_DIRECT);
//设置交换机的持久类型 1.不持久化到磁盘 2持久化 下面是持久化
$ex->setFlags(AMQP_DURABLE);
//声明交换机
$ex->declareExchange();
//通道里 设置队列
$q = new AMQPQueue($ch)
//设置队列名称
$q->setName('queue_1');
//设置队列持久性 1 非持久 2 持久 下面是持久
$q->setFlags(AMQP_DURABLE);
//声明队列
$q->declareQueue();
//路由键 交换机绑定路由键里
$q->bind($ex->getName(),$routingKey);
//接收消息并处理回调方法
function receive($envelope,$queue)
echo $envelope->getBody();//收到消息打印出来 生成者推给消费者的消息
//监听队列 一旦队列queue_1 有消息就执行
$q->consume("receive");
publisher.php
$config = [
'host'=>'127.0.0.1',//服务器的地址
'vhost'=>'/',//虚拟机 默认是/ (从控制台看 admin菜单 name)
'port'=>5672, //端口
'login'=>'root',
'password'=>'123456'
];
//连接broker 创建一个rabbitmq连接
$con = new AMQPConnection($config);//php 一个扩展
//判断是否连接上
if(!$con->connect())
exit("连接失败");
//在连接内创建一个通道
$ch = new AMQPChannel($con);
//通道下面 创建一个交换机
$ex = new AMQPExchange($ch);
//申明一个路由键
$routingKey = 'key_1';
//声明交换机名称
$exchangeName = 'exchange_1';
//设置交换机名称
$ex->setName($exchangeName);
//设置交换机类型 4种类型 下面用订阅模式
$ex->setType(AMQP_EX_TYPE_DIRECT);
//设置交换机的持久类型 1.不持久化到磁盘 2持久化 下面是持久化
$ex->setFlags(AMQP_DURABLE);
//声明交换机
$ex->declareExchange();
//推消息
for($i=1;$i<=10;$i++)
//消息内容
$msg = [
'data'=>'消息'.$i,
];
$ex->publish(json_encode($msg),$routingKey,AMQP_NOPARAM,array('delivery_mode'=>2));
未完待续~~
以上是关于rabbitmq学习笔记的主要内容,如果未能解决你的问题,请参考以下文章