RabbitMQ 安装

news2025/2/12 17:45:08

目录

  • 一、安装RabbitMQ
    • 1、Linux 安装
      • ⑴、官网rpm包安装
        • ①、下载rpm安装包
          • 官网下载
            • erlang
            • rabbitmq
          • packagecloud下载
            • erlang
            • rabbitmq
        • ②、安装 erlang
        • ③、安装rabbitmq
      • ⑵、packagecloud快速安装
      • ⑶、添加用户账号及权限并登陆
      • ⑷、卸载erlang与rabbitmq
        • 卸载rabbitmq
        • 卸载erlang
    • 2、Windows 安装
      • ⑴、安装erlang
      • ⑵、安装rabbitmq
  • 二、安装扩展及连接测试
    • ⑴、Linux安装扩展
      • ①、安装 rabbitmq-c 扩展
        • 遇到的问题
          • cmake 版本过低
          • openssl版本过低
      • ②、安装amqp扩展
      • ③、composer安装rabbitmq
    • ⑵、Windows安装扩展
      • ①、安装amqp扩展
      • ②、启用sockets扩展
      • ③、composer安装rabbitmq
    • ⑶、rabbitmq连接测试
      • ①、创建composer.json文件
      • ②、创建send.php、receive.php
      • ③、测试

一、安装RabbitMQ

1、Linux 安装

RabbitMQ是一个开源的遵循AMQP协议实现的基于 Erlang 语言编写,所以在安装 RabbitMQ 之前,必须安装新版本的 Erlang/OTP 。 标准的Red HatFedoraCentOS 提供的是的 Erlang 旧版本,不能用于运行最新的RabbitMQ版本。

支持的系统版本参考 官方文档。

我的服务器系统是CentOS 7.5 64位,Centos 停止维护有三个版本,即:CentOS 6(2020年11月30日停止更新)、CentOS7(2024年6月30日停止更新)、CentOS 8(2021年底停止更新),解决方案:

  • 在2024年6月之前基于两款新操作系统(CentOS Stream、RHEL订阅版),ubuntu、openEuler、Alibaba Cloud Linux 2(开源系统)进行系统适配开发、测试。

RabbitMQ 和 Erlang/OTP 兼容性:

RabbitMQ版本最低要求的 Erlang/OTP支持的最大 Erlang/OTP说明
3.12.025.026.0此版本系列与Erlang 26兼容。
Erlang中对OpenSSL 3.0的支持被认为已经足够成熟,可以用于生产。
3.11.0 ~ 3.11.1825.025.3.xErlang26引入了许多与网络和TLS相关的突破性变化。RabbitMQ与Erlang 26的兼容性将另行公布。
从Erlang25.1开始,Erlang中对OpenSSL 3.0的支持被认为已经足够成熟,可以用于生产。
25.0.2之前的Erlang 25受到CVE-2022-37026的影响,这是一种严重程度严重的CVE(CVSS 3.x基本分数:9.8)
3.10.19 ~ 3.10.2424.3.4.825.3.x24.3是Erlang 24中唯一维护(更新)的系列。
从Erlang25.1开始,Erlang中的OpenSSL 3.0支持被认为已经足够成熟,可以考虑用于生产。
25.0.2之前的Erlang 25和24.3.4.2之前的24受到CVE-2022-37026的影响,这是一种具有严重性的CVE(CVSS 3.x基本分数:9.8)
3.10.14 ~ 3.10.1824.325.224.3是Erlang 24中唯一维护(更新)的系列。
从Erlang25.1开始,Erlang中的OpenSSL 3.0支持被认为已经足够成熟,可以考虑用于生产。
25.0.2之前的Erlang 25和24.3.4.2之前的24受到CVE-2022-37026的影响,这是一种具有严重性的CVE(CVSS 3.x基本分数:9.8)
3.10.8 ~ 3.10.1324.225.2从Erlang25.1开始,Erlang中的OpenSSL 3.0支持被认为已经足够成熟,可以考虑用于生产。
25.0.2之前的Erlang 25和24.3.4.2之前的24受到CVE-2022-37026的影响,这是一种具有严重性的CVE(CVSS 3.x基本分数:9.8)
3.10.5 ~ 3.10.723.225.225.0.2之前的Erlang 25和24.3.4.2之前的24受到CVE-2022-37026的影响,这是一种具有严重性的CVE(CVSS 3.x基本分数:9.8)
Erlang 23支持已于2022年7月31日停止。
3.10.0 ~ 3.10.423.224.3Erlang 23支持已于2022年7月31日停止。

⑴、官网rpm包安装

①、下载rpm安装包

官网下载

官网下载地址:Erlang、RabbitMQ。

erlang

选择自己需要的 erlang 版本。

rabbitmq

先根据标签找到需要的版本,再去选择适合的安装包:

packagecloud下载

除了官网,还可以使用 packagecloud 的下载地址。

erlang

rabbitmq

由于我的服务器系统是CentOS 7.5 64位,所以必须选择支持CentOS 7的Erlang 和 RabbitMQ 版本,下载包的名字中的 el7,el8,el9分别代表CentOS7,CentOS8,CentOS9;我这里下载的是旧版本: erlang-23.3.4.11-1.el7.x86_64.rpmrabbitmq-server-3.10.0-1.el7.noarch.rpm

rmp包可以直接下载,使用 SCP 上传上去,又或者直接使用 wget 下载。

②、安装 erlang

[root@VM-0-12-centos ~]# wget --content-disposition "https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.4.11-1.el7.x86_64.rpm/download.rpm?distro_version_id=140"
[root@VM-0-12-centos ~]# rpm -ivh erlang-23.3.4.11-1.el7.x86_64.rpm
warning: erlang-23.3.4.11-1.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 6026dfca: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:erlang-23.3.4.11-1.el7           ################################# [100%]
[root@VM-0-12-centos ~]#
[root@VM-0-12-centos ~]# erl -v  # 安装成功
Erlang/OTP 23 [erts-11.2.2.10] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [hipe]

Eshell V11.2.2.10  (abort with ^G)
1>
[root@VM-0-12-centos ~]#

③、安装rabbitmq

[root@VM-0-12-centos ~]# wget --content-disposition "https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/7/rabbitmq-server-3.10.0-1.el7.noarch.rpm/download.rpm?distro_version_id=140"
[root@VM-0-12-centos ~]# rpm -ivh rabbitmq-server-3.10.0-1.el7.noarch.rpm
warning: rabbitmq-server-3.10.0-1.el7.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID 6026dfca: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:rabbitmq-server-3.10.0-1.el7     ################################# [100%]
[root@VM-0-12-centos ~]#
[root@VM-0-12-centos ~]#
[root@VM-0-12-centos ~]# systemctl start rabbitmq-server # 启动rabbitmq
[root@VM-0-12-centos ~]# systemctl status rabbitmq-server # 查看rabbitmq状态
● rabbitmq-server.service - RabbitMQ broker
   Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2023-06-12 17:26:18 CST; 8min ago
 Main PID: 14354 (beam.smp)
   CGroup: /system.slice/rabbitmq-server.service
           ├─14354 /usr/lib64/erlang/erts-11.2.2.10/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -sbwt none -sb...
           ├─14369 erl_child_setup 32768
           ├─14394 /usr/lib64/erlang/erts-11.2.2.10/bin/epmd -daemon
           ├─14414 inet_gethost 4
           └─14415 inet_gethost 4

Jun 12 17:26:17 VM-0-12-centos rabbitmq-server[14354]: Doc guides:  https://rabbitmq.com/documentation.html
Jun 12 17:26:17 VM-0-12-centos rabbitmq-server[14354]: Support:     https://rabbitmq.com/contact.html
Jun 12 17:26:17 VM-0-12-centos rabbitmq-server[14354]: Tutorials:   https://rabbitmq.com/getstarted.html
Jun 12 17:26:17 VM-0-12-centos rabbitmq-server[14354]: Monitoring:  https://rabbitmq.com/monitoring.html
Jun 12 17:26:17 VM-0-12-centos rabbitmq-server[14354]: Logs: /var/log/rabbitmq/rabbit@VM-0-12-centos.log
Jun 12 17:26:17 VM-0-12-centos rabbitmq-server[14354]: /var/log/rabbitmq/rabbit@VM-0-12-centos_upgrade.log
Jun 12 17:26:17 VM-0-12-centos rabbitmq-server[14354]: <stdout>
Jun 12 17:26:17 VM-0-12-centos rabbitmq-server[14354]: Config file(s): (none)
Jun 12 17:26:18 VM-0-12-centos systemd[1]: Started RabbitMQ broker.
Jun 12 17:26:18 VM-0-12-centos rabbitmq-server[14354]: Starting broker... completed with 3 plugins.
[root@VM-0-12-centos ~]#

参考其他博客时,都说需要安装 socat 依赖,但是我这里直接安装成功,如果有报错的的话就安装一下:

yum install -y socat 

安装管理工具RabbitMQ-Plugins:

rabbitmq-plugins enable rabbitmq_management

15672端口 访问成功:

接下来可直接查看下面的 【添加用户账号及权限并登陆】

⑵、packagecloud快速安装

packagecloud也是提供了快速安装方式的RabbitMQ,安装的时候我发现脚本它会自动选择最packagecloud中适合当前系统的最高版本。

  1. 使用脚本准备安装 erlang
    curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
    
  2. 使用 packagecloud脚本 准备安装 rabbitmq server
    curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
    
  3. yum 安装 erlang
    yum  -y install erlang
    
  4. yum 安装 rabbitmq server
    yum -y install rabbitmq-server
    
  5. 启动 RabbitMQ 服务:
    systemctl start rabbitmq-server
    
  6. 查看 RabbitMQ 服务状态:
    systemctl status rabbitmq-server
    
  7. 安装管理工具RabbitMQ-Plugins:
    rabbitmq-plugins enable rabbitmq_management
    
    使用 15672端口 打开管理网页:

⑶、添加用户账号及权限并登陆

添加 RabbitMQ 用户,并设置权限:

rabbitmqctl add_user [username] [password] 			# 添加用户账号 
rabbitmqctl set_user_tags [username] administrator 	# 给用户添加权限
[root@VM-0-12-centos ~]# rabbitmqctl add_user rabbitmq rabbitmq
Adding user "rabbitmq" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
[root@VM-0-12-centos ~]# rabbitmqctl set_user_tags rabbitmq administrator
Setting tags for user "rabbitmq" to [administrator] ...
[root@VM-0-12-centos ~]#

回到上面截图页面,登录rabbitmq:

RabbitMQ常用命令:

查看RabbitMQ状态:
rabbitmqctl status

启动RabbitMQ服务:
systemctl start rabbitmq-server

停止RabbitMQ服务:
systemctl stop rabbitmq-server

重启RabbitMQ服务:
systemctl restart rabbitmq-server

查看RabbitMQ用户列表:
rabbitmqctl list_users

删除RabbitMQ用户:
rabbitmqctl delete_user [username]

修改RabbitMQ用户密码:
rabbitmqctl [oldpassword] [username] [newpassword]

⑷、卸载erlang与rabbitmq

如果需要熟悉不同安装方式,或者版本不兼容的话需要卸载:

卸载rabbitmq

# 卸载前先停掉rabbitmq服务
service rabbitmq-server stop

# 查看rabbitmq安装的相关列表
yum list | grep rabbitmq

# 卸载rabbitmq已安装的相关内容
yum -y remove rabbitmq-server.noarch

卸载erlang

查看erlang安装的相关列表
yum list | grep erlang
卸载erlang已安装的相关内容

卸载erlang已安装的相关内容
yum -y remove erlang-*
yum remove erlang.x86_64

2、Windows 安装

Windows 安装直接在官网中下载exe应用程序,这里我就直接下载了最新版本:otp_win64_26.0.1.exerabbitmq-server-3.12.0.exe(参考上面RabbitMQ 和 Erlang/OTP 兼容性)。

⑴、安装erlang

下载erlang:

下载成功后直接双击otp_win64_26.0.1.exe开始安装(一直next即可,我这里安装位置改到了D盘),安装成功后如下:

环境变量添加 erlang 配置:

cmd 执行 erl -v 测试是否安装成功:

⑵、安装rabbitmq


和erlang 一样,直接双击应用程序开始安装(一直next,只改了安装位置),安装成功后如下:

环境变量PATH追加 rabbitmq 的 sbin 路径:

安装管理工具RabbitMQ-Plugins:

访问http://localhost:15672/,(默认账号:guest,密码:guest)就能进入RabbitMQ管理界面:

二、安装扩展及连接测试

如果PHP环境下使用 RabbitMQ 的话,要先在本地安装 php-amqplib 扩展,这个对应的是 amqp 扩展,扩展下载地址。

⑴、Linux安装扩展

Linux系统下 php 操作 rabbitmq 需要安装 amqp 扩展,但是安装 amqp 扩展前需要安装 rabbitmq-c

rabbitmq-c是一个用于C语言的,与AMQP server进行交互的client库,AMQP协议为版本0-9-1。rabbitmq-c与server进行交互前需要首先进行login操作,在操作后,可以根据AMQP协议规范,执行一系列操作。

我个人理解就是 php 底层是 C 语言, 而rabbitmq 是基于 erlang 语言,所以abbitmq-c扩展就是用于php与erlang的交互。

①、安装 rabbitmq-c 扩展

rabbitmq-c 扩展下载地址。

cd /usr/local
git clone https://github.com/alanxz/rabbitmq-c.git
cd /usr/local/rabbitmq-c 
mkdir build && cd build \
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/rabbitmq-c .. 
cmake --build . --target install 
cd /usr/local/rabbitmq-c/lib64
cp /usr/local/rabbitmq-c/lib64/librabbitmq.so /usr/lib
cp /usr/local/rabbitmq-c/lib64/librabbitmq.so.4 /usr/lib
echo "include /usr/local/lib" >> /etc/ld.so.conf
ldconfig
如果openssl版本过低,下载不了,就直接浏览器下载,SCP上传一下
[root@VM-0-12-centos local]# wget -c https://github.com/alanxz/rabbitmq-c/archive/refs/tags/v0.13.0.tar.gz
[root@VM-0-12-centos local]# tar zxf v0.13.0.tar.gz
[root@VM-0-12-centos local]# cd /usr/local/rabbitmq-c-0.13.0/
[root@VM-0-12-centos rabbitmq-c-0.13.0]# mkdir build && cd build 
[root@VM-0-12-centos build]# ls
CMakeCache.txt  CMakeFiles
[root@VM-0-12-centos build]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/rabbitmq-c ..
...
[root@VM-0-12-centos build]# cmake --build . --target install 
...
[root@VM-0-12-centos build]# cd /usr/local/rabbitmq-c/lib64/
[root@VM-0-12-centos lib64]# cp /usr/local/rabbitmq-c/lib64/librabbitmq.so /usr/lib
[root@VM-0-12-centos lib64]# cp /usr/local/rabbitmq-c/lib64/librabbitmq.so.4 /usr/lib
[root@VM-0-12-centos lib64]# echo "include /usr/local/lib" >> /etc/ld.so.conf
[root@VM-0-12-centos lib64]# ldconfig
[root@VM-0-12-centos lib64]#

遇到的问题

cmake 版本过低
[root@VM-0-12-centos build]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/rabbitmq-c ..
CMake Error at CMakeLists.txt:4 (cmake_minimum_required):
  CMake 3.12...3.18 or higher is required.  You are running version 2.8.12.2


-- Configuring incomplete, errors occurred!
[root@VM-0-12-centos build]# cmake --version
cmake version 2.8.12.2

解决方法:

  • 打开 这里,下载高版本的cmake,我选择的是 cmake-3.12.4.tar.gz
    [root@VM-0-12-centos ~]# wget https://cmake.org/files/v3.12/cmake-3.12.4.tar.gz
    [root@VM-0-12-centos ~]# tar zxf cmake-3.12.4.tar.gz
    [root@VM-0-12-centos ~]# cd cmake-3.12.4/
    [root@VM-0-12-centos cmake-3.12.4]# ./bootstrap
    ...
    [root@VM-0-12-centos cmake-3.12.4]# make && make install
    ...
    [root@VM-0-12-centos cmake-3.12.4]# cmake --version
    cmake version 3.12.4
    
    CMake suite maintained and supported by Kitware (kitware.com/cmake).
    [root@VM-0-12-centos cmake-3.12.4]#
    
openssl版本过低

解决办法:

  • 升级openssl:
    [root@VM-0-12-centos local]# wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
    [root@VM-0-12-centos local]# tar -zxf openssl-1.1.1g.tar.gz
    [root@VM-0-12-centos local]# cd  openssl-1.1.1g
    [root@VM-0-12-centos openssl-1.1.1g]# ./config --prefix=/usr/local/openssl shared zlib
    ...
    [root@VM-0-12-centos openssl-1.1.1g]# make depend
    [root@VM-0-12-centos openssl-1.1.1g]# make && make install
    ...
    [root@VM-0-12-centos openssl-1.1.1g]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
    [root@VM-0-12-centos openssl-1.1.1g]# ln -s /usr/local/openssl/include/openssl /usr/include/openssl
    [root@VM-0-12-centos openssl-1.1.1g]# echo "/usr/local/ssl/lib" >> /etc/ld.so.conf  # 更新动态链接库数据
    [root@VM-0-12-centos openssl-1.1.1g]# ldconfig -v # 重新加载动态链接库
    [root@VM-0-12-centos openssl-1.1.1g]# ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib
    [root@VM-0-12-centos openssl-1.1.1g]# ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib
    [root@VM-0-12-centos openssl-1.1.1g]# openssl version
    OpenSSL 1.1.1g  21 Apr 2020
    [root@VM-0-12-centos lib]#
    

②、安装amqp扩展


wget或者直接下载使用SCP上传:

[root@VM-0-12-centos ~]# wget http://pecl.php.net/get/amqp-1.11.0.tgz
[root@VM-0-12-centos ~]# tar -zxf amqp-1.11.0.tgz
[root@VM-0-12-centos ~]# cd amqp-1.11.0/
[root@VM-0-12-centos amqp-1.11.0]# ls
amqp_basic_properties.c     amqp_envelope.c          amqp_type.h
amqp_basic_properties.h     amqp_envelope.h          benchmark.php
amqp.c                      amqp_exchange.c          config.m4
amqp_channel.c              amqp_exchange.h          config.w32
amqp_channel.h              amqp_methods_handling.c  CREDITS
amqp_connection.c           amqp_methods_handling.h  LICENSE
amqp_connection.h           amqp_queue.c             php5_support.h
amqp_connection_resource.c  amqp_queue.h             php7_support.h
amqp_connection_resource.h  amqp_timestamp.c         php_amqp.h
amqp_decimal.c              amqp_timestamp.h         stubs
amqp_decimal.h              amqp_type.c              tests
[root@VM-0-12-centos amqp-1.11.0]#

解压后,使用phpize安装扩展,下面的路径换成自己的:

[root@VM-0-12-centos amqp-1.11.0]# find / -name phpize
/usr/local/php/bin/phpize
/usr/bin/phpize
[root@VM-0-12-centos amqp-1.11.0]# /usr/local/php/bin/phpize
[root@VM-0-12-centos amqp-1.11.0]# ./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c
...
[root@VM-0-12-centos amqp-1.11.0]# make && make install
...
Build complete.
Don't forget to run 'make test'.

Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/
[root@VM-0-12-centos amqp-1.11.0]# 

修改配置文件php.ini,追加以下内容:

extension = amqp.so

重启php-fpm,查看是否安装成功:

[root@VM-0-12-centos sockets]# php -m
[PHP Modules]
amqp
bcmath
Core
ctype
...

Windows 系统下 sockets 扩展是默认关闭的,但是Linux下 sockets 扩展是开启的,查看是否启用:

[root@VM-0-12-centos sockets]# php -m
[PHP Modules]
amqp
bcmath
Core
ctype
curl
date
dom
fileinfo
filter
ftp
gd
gettext
hash
iconv
intl
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvsem
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
xsl
zip
zlib

[Zend Modules]

[root@VM-0-12-centos sockets]#

③、composer安装rabbitmq

root@VM-0-12-centos ~]# cd /home/wwwroot/laravel/
[root@VM-0-12-centos laravel]# composer require vladimir-yuldashev/laravel-queue-rabbitmq
Cannot use vladimir-yuldashev/laravel-queue-rabbitmq's latest version v13.3.0 as it requires php ^8.0 which is not satisfied by your platform.
./composer.json has been updated
Running composer update vladimir-yuldashev/laravel-queue-rabbitmq
Loading composer repositories with package information
Updating dependencies
Lock file operations: 5 installs, 0 updates, 0 removals
  - Locking paragonie/constant_time_encoding (v2.6.3)
  - Locking paragonie/random_compat (v9.99.100)
  - Locking php-amqplib/php-amqplib (v3.5.2)
  - Locking phpseclib/phpseclib (3.0.19)
  - Locking vladimir-yuldashev/laravel-queue-rabbitmq (v11.3.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 5 installs, 0 updates, 0 removals
  - Installing paragonie/random_compat (v9.99.100): Extracting archive
  - Installing paragonie/constant_time_encoding (v2.6.3): Extracting archive
  - Installing phpseclib/phpseclib (3.0.19): Extracting archive
  - Installing php-amqplib/php-amqplib (v3.5.2): Extracting archive
  - Installing vladimir-yuldashev/laravel-queue-rabbitmq (v11.3.0): Extracting archive
4 package suggestions were added by new dependencies, use `composer suggest` to see details.
Package fruitcake/laravel-cors is abandoned, you should avoid using it. No replacement was suggested.
Package swiftmailer/swiftmailer is abandoned, you should avoid using it. Use symfony/mailer instead.
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fruitcake/laravel-cors
Discovered Package: laravel/sail
Discovered Package: laravel/sanctum
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Discovered Package: vladimir-yuldashev/laravel-queue-rabbitmq
Package manifest generated successfully.
78 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> @php artisan vendor:publish --tag=laravel-assets --ansi --force
No publishable resources for tag [laravel-assets].
Publishing complete.
No security vulnerability advisories found
Using version ^11.3 for vladimir-yuldashev/laravel-queue-rabbitmq
[root@VM-0-12-centos laravel]#

⑵、Windows安装扩展

①、安装amqp扩展

根据我的环境是 php7.3,选择的是64位NON Thread Safe(TS),不知道选择TS 还是 NTS的下面。

  • TS和NTS
    • TS指Thread Safety,即线程安全,一般在IIS以ISAPI方式加载的时候选择这个版本。
    • NTS即None-Thread Safe,一般以fast cgi方式运行的时候选择这个版本,具有更好的性能。

       从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程的工作方式不同的是Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程的基础之上的,而非多线程。一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的PHP扩展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。因此在IIS下CGI模式才是 PHP运行的最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。

       为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优势。
       因此,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本;而用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率。


下载解压后如下:

打开自己的php安装目录,因为我用的是phpstudy,安装了多个PHP环境,这里我以php7.3.4为例:

Admin@DESKTOP-CSH3FGN MINGW64 ~/Desktop
$ php -v
PHP 7.3.4 (cli) (built: Apr  2 2019 21:57:22) ( NTS MSVC15 (Visual C++ 2017) x64
 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.4, Copyright (c) 1998-2018 Zend Technologies
    with Xdebug v2.9.6, Copyright (c) 2002-2020, by Derick Rethans

Admin@DESKTOP-CSH3FGN MINGW64 ~/Desktop
$


接下来需要把解压后的 php_amqp.dllrabbitmq.4.dll,放到对应的目录:

  • php_amqp.dll 放到 E:\phpstudy_pro\Extensions\php\php7.3.4nts\ext 目录下;

  • rabbitmq.4.dll 放到 php.exe 同级目录,即 E:\phpstudy_pro\Extensions\php\php7.3.4nts

    php.ini 配置文件中添加扩展 extension=php_amqp.dll,并重启php:

    phpinfo查看是否安装成功:

②、启用sockets扩展

除了amqp 扩展,还需要启用 sockets 扩展,这个php自带的但是没有启用,删除配置文件的注释重启php就好;

重启PHP。

③、composer安装rabbitmq

方式一:
composer require vladimir-yuldashev/laravel-queue-rabbitmq

方式二:
"require": {
    "vladimir-yuldashev/laravel-queue-rabbitmq": "^11.3"
},
composer install
E:\work\laravel>composer require vladimir-yuldashev/laravel-queue-rabbitmq
Using version ^11.3 for vladimir-yuldashev/laravel-queue-rabbitmq
./composer.json has been updated
Running composer update vladimir-yuldashev/laravel-queue-rabbitmq
Loading composer repositories with package information
Updating dependencies
Lock file operations: 5 installs, 0 updates, 0 removals
  - Locking paragonie/constant_time_encoding (v2.6.3)
  - Locking paragonie/random_compat (v9.99.100)
  - Locking php-amqplib/php-amqplib (v3.5.2)
  - Locking phpseclib/phpseclib (3.0.19)
  - Locking vladimir-yuldashev/laravel-queue-rabbitmq (v11.3.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 5 installs, 0 updates, 0 removals
  - Downloading paragonie/random_compat (v9.99.100)
  - Downloading paragonie/constant_time_encoding (v2.6.3)
  - Downloading phpseclib/phpseclib (3.0.19)
  - Downloading php-amqplib/php-amqplib (v3.5.2)
  - Downloading vladimir-yuldashev/laravel-queue-rabbitmq (v11.3.0)
  - Installing paragonie/random_compat (v9.99.100): Extracting archive
  - Installing paragonie/constant_time_encoding (v2.6.3): Extracting archive
  - Installing phpseclib/phpseclib (3.0.19): Extracting archive
  - Installing php-amqplib/php-amqplib (v3.5.2): Extracting archive
  - Installing vladimir-yuldashev/laravel-queue-rabbitmq (v11.3.0): Extracting archive
5 package suggestions were added by new dependencies, use `composer suggest` to see details.
Package fruitcake/laravel-cors is abandoned, you should avoid using it. No replacement was suggested.
Package swiftmailer/swiftmailer is abandoned, you should avoid using it. Use symfony/mailer instead.
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fruitcake/laravel-cors
Discovered Package: laravel/sail
Discovered Package: laravel/sanctum
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Discovered Package: vladimir-yuldashev/laravel-queue-rabbitmq
Package manifest generated successfully.
77 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> @php artisan vendor:publish --tag=laravel-assets --ansi --force
No publishable resources for tag [laravel-assets].
Publishing complete.

E:\work\laravel>

⑶、rabbitmq连接测试

参考:Hello World。

①、创建composer.json文件

composer.json 内容:

{
	"require": {
		"php-amqplib/php-amqplib": "2.6.1"
    }
}

加载依赖:

composer install

②、创建send.php、receive.php

send.php 内容:

<?php

require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('hello', false, false, false, false);

$msg = new AMQPMessage('Hello World!');
$channel->basic_publish($msg, '', 'hello');

echo " [x] Sent 'Hello World!'\n";

$channel->close();
$connection->close();
?>

receive.php 内容:

<?php

require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('hello', false, false, false, false);

echo " [*] Waiting for messages. To exit press CTRL+C\n";

$callback = function ($msg) {
    echo ' [x] Received ', $msg->body, "\n";
};

$channel->basic_consume('hello', '', false, true, false, false, $callback);

while ($channel->is_open()) {
    $channel->wait();
}

$channel->close();
$connection->close();
?>

③、测试

发送:

接收:

至此安装成功,接下来就开始继续学习rabbitmq的更多用法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/645711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

积聚产业发展新动能|2023开放原子全球开源峰会OpenAtom OpenHarmony分论坛成功举办

6 月 12 日&#xff0c;以“OpenHarmony 共建开放&#xff0c;共享未来”为主题的 2023 开放原子全球开源峰会 OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;分论坛在北京北人亦创国际会展中心第一报告厅圆满落幕。开放原子开源基金会理事长孙文龙、华…

【mongoDB数据库基本操作】

mongoDB 基本命令使用 mongoDB数据库基本操作1、连接/创建数据库3、查看数据库4、删除数据库 表的基本操作1、创建表2、删除表3、查询表4、更新表删除表中的记录 mongoDB数据库基本操作 连接mongoDb服务器 进入到mongoDb安装目录 cd /data/mongodb/bin 使用./mongo连接到本…

为什么你的领导,总是挑刺,要求你要有自己的思考?

为什么你的领导&#xff0c;总是挑刺&#xff0c;要求你要有自己的思考&#xff1f; 如何思考&#xff1f;其实有方法论和框架&#xff0c;照这做&#xff0c;也能提升自己的思考能力和维度。 尴尬的问题 在职场的给位是否遇到过这种情况。领导在开完一次沟通会&#xff0c;或…

公元前后的王莽与屋大维

公元元年前后&#xff0c;地球的两端同时产生了两个辉煌的大国&#xff0c;z国和罗马。 我国经历了漫长而又松散的分封制后&#xff0c;在秦帝国时期实现了大一统&#xff0c;在那个时代&#xff0c;因为分封制有效的管理半径最多也就是500公里左右&#xff0c;所以非常不适合…

牛客网1658 页的 Java 岗面试突击手册,GitHub已下载量已过百万

不得不说程序员除了做项目之外&#xff0c;提升自己技能最快的方式就是【看书&#xff01;】和【刷题&#xff01;】&#xff0c;这里说的刷题不是无脑刷&#xff0c;而是要明白面试官为什么会问这个问题&#xff0c;以及这个问题的意义在哪里&#xff01; 今天带来的是全新升…

Beyond Compare 4 正版激活码 -变化是不可避免的,因此,请使用最好的工具对其进行管理。

Beyond Compare 是开发人员、系统管理员和其他人用来比较、合并和同步数据的软件应用程序。它可以在Windows&#xff0c;macOS和Linux上运行。 功能特点 比较文件夹、文件 一、随时随地访问数据 Beyond Compare 是敏捷的。 我们的虚拟文件系统以透明的方式将您连接到您的数据…

Stable Diffusion实操示例

一、负向提示词 解决问题&#xff1a;生成的图片存在瑕疵&#xff0c;比如多只眼睛、多只手指等情况。通过embeddings可以将避免一些常用的不好结果。 方法&#xff1a;从https://civitai.com/?utm_sourcenettsz.com 中下载负向提示词的embeddings模型&#xff0c; EasyNeg…

SOLIDWORKS 2023修复遗漏配合参考及装配体磁力配合

1、修复遗漏的配合参考 ① 为面、边线、平面、轴和点的参考修复遗漏的配合参考 ② 位于与遗漏的参考相同的位置和方向的零部件上选择参考&#xff0c;可修复零 部件遗漏的参考 ③ 包含多个遗漏的配合参考的模型&#xff0c;右键单击配合 文件夹&#xff0c;然后单击自动修复…

AI Expo 2023 | 图技术激活数据资产主题论坛线下报名限时开放!

洞察关联数据 创造无限可能 图技术激活数据资产主题论坛 将于2023年6月25日在苏州召开。 大会背景 本次图技术激活数据资产论坛&#xff0c;由苏州市大数据服务中心协会主办、浙江创邻科技有限公司承办&#xff0c;苏州市计算机学会、苏州市大数据和人工智能产业联盟协办&…

(五) ElasticSearch 数据类型和文档CRUD操作

1.ES数据类型 官方文档地址&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html#_complex_datatypes 核心数据类型&#xff08;Core Data Types&#xff09;&#xff1a; 核心数据类型是 Elasticsearch 最基本和常用的数据类型…

DataX 3.0 在Windows下基于MySQL做数据迁移示例

在 Windows 安装 Datax&#xff1a; Datax 官网&#xff1a;https://github.com/alibaba/DataX 环境要求&#xff1a; 1&#xff1a;JDK&#xff08;1.8以上&#xff0c;推荐1.8&#xff0c;并配置好环境变量&#xff09; 2&#xff1a;Python&#xff08;网上推荐Python2.…

Java线程的同步机制(synchronized关键字)

线程的同步机制(synchronized ) 1.背景 例子&#xff1a;创建个窗口卖票&#xff0c;总票数为100张.使用实现Runnable接口的方式 * 1.问题&#xff1a;卖票过程中&#xff0c;出现了重票、错票 -->出现了线程的安全问题2.问题出现的原因&#xff1a;当某个线程操作车票的过…

罗马不是一天建成的,那为什么建了那么多罗马?

这一个罗马&#xff0c;那一个罗马&#xff0c;东一个罗马&#xff0c;西一个罗马&#xff0c;世界历史的大半部分都在跟罗马打交道。更要命的是四大文明古国还没有古代罗马。 存在感这么强&#xff0c;还不是四大文明古国&#xff0c;名字还难记&#xff0c;公元前居然就有共…

P19[6-7]编码器接口(硬)

编码器接口自动控制定时器时基单元中的CNT计数器进行自增或自减,(初始化后CNT=0;编码器右转,产生一个脉冲,CNT++,左转,产生一个脉冲,CNT--)。相当于外部时钟,同时控制CNT计数方向和计数时钟。每隔一段时间取CNT的值,再把CNT清零,就表示编码器的速度。 编码器测速即测频法…

总结linux查看当前用户的方法

操作环境&#xff1a;ubuntu 18.04系统 一、查看当前用户 1、shell终端中输入&#xff1a;who 当前用户为&#xff1a;root&#xff0c;使用pts的终端&#xff0c;后面是登陆的时间 2、shell终端中输入&#xff1a;whoami 当前用户为&#xff1a;root&#xff0c;很精简输出结果…

SpringBoot - spring-boot-maven-plugin插件介绍

简述 这个是SpringBoot的MAVEN插件&#xff0c;主要用来打包的&#xff0c;通常用来将项目打包成JAR或者WAR文件&#xff08;生成FAT 包&#xff09;。 这个插件生成的包是可执行的JAR。 Spring Boot Maven Plugin Documentation&#xff1a;https://docs.spring.io/spring-boo…

了解和使用 Kubernetes

文章目录 前言Kubernetes 集群安装Kubernetes 功能Kubernetes 核心概念Kubernetes 部署应用发布部署脚本发布服务使用 Ingress配置自动伸缩 Kubernetes 常用命令Kubernetes 故障排查 前言 通过 《容器集群管理工具 Docker Swarm》可以知道&#xff0c;在部署、调度、扩展和管理…

计算机时间到底是怎么来的?程序员必看的时间知识!

参考文章&#xff1a;https://xie.infoq.cn/article/22d762b26daee8b3f404f60a6 <title>计算机时间到底是怎么来的&#xff1f;程序员必看的时间知识&#xff01;_操作系统_Kaito_InfoQ写作社区</title><meta name"description" content"大家好&…

【阿里云OSS: Java端提供签名,vue+elementUI+axios 实现直传文件到OSS 实例】

文章目录 java代码&#xff08;包含后端上传文件、删除文件、提供签名&#xff09;前端代码postman 测试截图 java代码&#xff08;包含后端上传文件、删除文件、提供签名&#xff09; {private final static String OSS_BUCKET_NAME "test";private final static …

Day06 Python入门必知必会

文章目录 第一章 Python环境搭建1.1. 计算机基础1.1.1. 什么是编程1.1.2. 什么是进制1.1.2.1. 进制的简介1.1.2.2. 进制的分类1.1.2.3. 进制的表示1.1.2.4. 进制的转换1.1.2.5. 原反补(了解)数据的转换负数的表示补码的引入 1.2. Python的介绍1.3. Python的安装与使用1.3.1. Py…