rabbitmq学习笔记

Posted mr.杰瑞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rabbitmq学习笔记相关的知识,希望对你有一定的参考价值。

rabbitmq

AMQP协议

  • 生产者
  • 消费者
  • 队列
    一个队列存多条消息
  • 消息
  • 连接
    发消息和接收消息都是必须先建立连接
  • 通道(channel)
    一个连接有多个通道,消息会在通道里面流转,之后到达消费者
  • 交换机(exchange)
    路由的概念,通过绑定,和路由
  • 路由键
    交换机通过路由键去寻址,找到队列
  • 绑定
    队列和交换机的一个关联连接
  • 用户
    在RabbitMQ里,可以通过制定的用户名和密码来进行连接,每个用户可以分配不同的权限。读或者写或在实例里配置的权限

    交换机类似mysql的数据库,queue对应的mysql的某张表

安装

  1. 首先安装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

  1. 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

继续

  1. 安装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学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMq学习笔记

学习笔记编程不良人老师的RabbitMQ教程的学习笔记

Python 学习笔记 - RabbitMQ

RabbitMq学习笔记

RabbitMQ学习笔记五:RabbitMQ之优先级消息队列

rabbitmq学习笔记