消息队列rabbitmq

您所在的位置:网站首页 什么牌子的led灯泡质量好 消息队列rabbitmq

消息队列rabbitmq

#消息队列rabbitmq| 来源: 网络整理| 查看: 265

消息队列rabbitmq

2018-11-03- 来源:原创- 浏览:1438

RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统,底层基于Erlang语言。

一:centos7安装RabbitMQ

这玩意儿安装很扯淡,官方推荐rpm安装,rpm安装本身是最简单的,但是安装RabbitMQ却不简单,很可能需要修改仓库地址。不同linux版本不一样,centos6和centos7也不一样。我这里不用rpm,手动编译Erlang,然后选择编译好的RabbitMQ。

1:安装Erlang

1):先安装几个必要的插件

$ yum -y install gcc glibc-devel make ncurses-devel openssl-devel autoconf unixODBC unixODBC-devel socat

2):Erlang下载地址:http://www.erlang.org/downloads,我这里下载21.1版本

$ wget http://erlang.org/download/otp_src_21.1.tar.gz #下载 $ tar -xvf otp_src_21.1.tar.gz #解压 $ cd otp_src_21.1/ #进入目录准备编译 $ ./configure --prefix=/usr/local/erlang --without-javac #忽略java编译 $ make #编译 $ make install #安装

 make & make install 这两步很慢,巨慢无比,耐心等待。

3):进入我们安装后的目录测试一下是否安装成功

$ /usr/local/erlang/bin/erl安装成功

二:安装rabbitmq

1:下载地址:http://www.rabbitmq.com/download.html

2:因为我上面的Erlang是手动编译的,所以这里不选择rpm方式安装,直接下载解压包,从这里下载:https://github.com/rabbitmq/rabbitmq-server/releases

$ wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.8/rabbitmq-server-generic-unix-3.7.8.tar.xz $ tar xvJf rabbitmq-server-generic-unix-3.7.8.tar.xz $ mv rabbitmq_server-3.7.8/ /usr/local/rabbitmq #解压后移动到你想放到的目录这个是编译好的,可以直接用。

3:设置环境变量,设置两个,一个是Erlang,一个是rabbitmq,打开文件/etc/profile文件,在文件最后加入以下三行:

export ERLANG_PATH=$PATH:/usr/local/erlang/bin #erlang安装目录 export RABBITMQ_PATH=$PATH:/usr/local/rabbitmq/sbin #rabbitmq安装目录 export PATH=$PATH:$ERLANG_PATH:$RABBITMQ_PATH运行命令生效:

source /etc/profile启动一下:

$ rabbitmq-server

成功

启动web管理后台:

$ rabbitmq-plugins enable rabbitmq_management #disable为关闭开启防火墙,打开15672端口

firewall-cmd --zone=public --add-port=15672/tcp --permanent firewall-cmd --reload #重启防火墙web界面出来了

guest用户被限制,只能通过127.0.0.1访问,当然也可以修改配置文件开启guest远程访问。这里我们新建一个用户,并授予管理员权限。用户名:admin 密码:123

$ rabbitmqctl add_user admin 123 #添加用户 $ rabbitmqctl set_user_tags admin administrator #分配角色

登录成功

相关命令:命令在/usrlocal/rabbitmq/sbin下

rabbitmq-server -detached #后台启动 rabbitmqctl stop #关闭服务 rabbitmqctl status #查看状态 rabbitmqctl list_users #列出角色

三:安装php扩展(我用的php7.2版本)

php是用amqp调用RabbitMQ,所以先下载ampq

$ wget https://pecl.php.net/get/amqp-1.9.3.tgz #下载 $ tar -xvf amqp-1.9.3.tgz #解压 $ cd amqp-1.9.3 $ /usr/local/php/bin/phpize #用phpize生成编译文件,注意查看你的php在哪里 $ ./configure --with-php-config=/usr/local/php/bin/php-config到这一步,我这里报错了:checking for amqp using pkg-config... configure: error: librabbitmq not found

这个错误提示还要安装一个破玩意:rabbitmq-c

去这里下载:https://github.com/alanxz/rabbitmq-c/releases

$ wget https://github.com/alanxz/rabbitmq-c/archive/v0.9.0.tar.gz $ tar -xvf v0.9.0.tar.gz $ cd rabbitmq-c-0.9.0/准备configure的时候,发现没有configure,0.9改成cmake了,靠,安装一下cmake

$ yum -y install cmake $ cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/rabbitmq-c-0.9.0 #指定安装目录 $ make $ make install

然后回过头去再编译amqp-1.9.3

$ ./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c-0.9.0 $ make $ make install

妈的,make报错!

发现点蛛丝马迹,上面进入了/usr/local/rabbitmq-c-0.9.0/lib 目录,查看一下发现/usr/local/rabbitmq-c-0.9.0/没有lib,但有个lib64位。

处理一下:

$ cp -R /usr/local/rabbitmq-c-0.9.0/lib64/ /usr/local/rabbitmq-c-0.9.0/lib

接着干:make && make install ,OK,这也太不智能了吧。

加入到php.ini 查看一下!

extension=amqp.so  

扩展安装成功,这时候就可以用PHP操作RabbitMQ了。

四:一些基本术语参数

1:Message:消息。包括消息头和消息体2:Publisher:生产者。发布消息的一方3:Consumer:消费者。接受消息的一方4:Connection:网络链接,TCP链接5:Channel:信道。建立在真实的TCP连接内地虚拟连接,所有命令通过信道输入输出,多路复用一条 TCP 连接,降低TCP开销6:ExChange:交换区。因为RabbitMQ是基于AMQP的,AMQP协议中的核心思想就是生产者和消费者隔离,也就是生产者不直接把消息发到队列,而是先发给ExChange(交换区),Exchange按照特定的策略转发到Queue(队列中)进行存储,所以ExChange的作用就是负责转发,生产者只面向 Exchange 发布消息,消费者只面向 Queue 消费消息。

Direct:将消息中的Routing key与该Exchange关联的所有Binding中的Routing key进行比较,完全相等,则发送到该Binding对应的Queue中。

Topic:模糊匹配,如果匹配上了,则发送到该Binding对应的Queue中。 * 表示可以匹配零个或多个字符(Routing key是user.# user.a user.b user都可以匹配) # 表示可以匹配一个字符 (Routing key是user.* user.a user.b 可以匹配;user user.a.c 不可以匹配)

Fanout:直接将消息转发到所有binding的对应queue中,忽略Routing key。

Headers Exchange:将消息中的headers与该Exchange相关联的所有Binging中的参数进行匹配,如果匹配上了,则发送到该Binding对应的Queue中。7:Binding:绑定。建立交换区与消息队列之间的关联,也就是设置规则,交换区该发送到哪个队列。8:Queue:消息队列容器,存储消息队列的地方。durability表示是否持久化,durable表示是,transient表示否。9:Vhost:翻译叫什么虚拟主机,其实就类似于mysql的数据库,一个意思。五:一些基本命令

$ rabbitmq-server -detached #后台启动 $ rabbitmqctl stop [] #停止RabbitMQ服务,同时关闭erlang节点和应用程序 $ rabbitmqctl status #查看状态 $ rabbitmqctl stop [] $ rabbitmqctl stop_app #停止RabbitMQ服务,仅关闭erlang节点上的rabbit应用程序 $ rabbitmqctl start_app #启动erlan node上的rabbitmq的应用 #用户管理 $ rabbitmqctl list_users #列出角色 $ rabbitmqctl add_user admin 123 #添加用户和密码 这里用户名:admin 密码:123 $ rabbitmqctl set_user_tags admin administrator #分配角色 $ rabbitmqctl change_password username newpassword #修改用户密码 $ rabbitmqctl delete_user username #删除用户 # vhost(Virtual host)管理,这玩意儿相当于mysql的数据库 $ rabbitmqctl add_vhost {name} #添加 $ rabbitmqctl delete_vhost {name} #删除 $ rabbitmqctl list_vhosts {name} #查看所有

六:php操作RabbitMQ

1:实践:用PHP创建交换区:goods_msm,队列名称:goods_worker,以及路由key:code1



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3