RabbitMQ 安装

目录

  • 一、安装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的更多用法。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

手把手教你实战TDD | 京东云技术团队

1. 前言 领域驱动设计&#xff0c;测试驱动开发。 我们在《手把手教你落地DDD》一文中介绍了领域驱动设计&#xff08;DDD&#xff09;的落地实战&#xff0c;本文将对测试驱动开发&#xff08;TDD&#xff09;进行探讨&#xff0c;主要内容有&#xff1a;TDD基本理解、TDD常…

了解D-Galactopyranose pentaacetate,CAS号25878-60-8的性质和应用

​ 中文名称&#xff1a;1,2,3,4,6-D-葡萄糖五乙酸酯 英文名称&#xff1a;D-Galactopyranose pentaacetate 规格标准&#xff1a;1g、5g、10g CAS&#xff1a;25878-60-8 分子式&#xff1a;C16H22O11 分子量&#xff1a;390.34 熔点&#xff1a;113C 沸点&#xff1a;451C 密…

MATLAB文化算法

目录 文化算法 主要代码 Sphere AdjustCulture 结果 文化算法 基本概念&#xff1a;优化算法 | 详解文化算法&#xff08;附MATLAB代码&#xff09; - 知乎 不同于遗传算法只有种群进化空间&#xff0c;文化算法包含信念空间、种群空间两个进化空间&#xff0c;因此&#…

ceph分布式存储实战

ceph分布式存储实战 分布式存储系统简介 性能与优势对比 虚拟机安装ceph集群 ceph存储系统简介 分布式存储概述 ceph基础 高可用ceph分布式存储系统部署 部署ceph集群 节点管理 ceph使用基础及数据存储案例 PG状态、数据读写流程及存储池操作 mon服务器的高可用: # apt in…

KaiwuDB 受邀亮相 IOTE 2023 第十九届国际物联网展

5月17日&#xff0c;IOTE 2023 第十九届国际物联网展在上海拉开序幕&#xff0c;全球超过 350 家参展企业到场展示先进的物联网技术和产品&#xff0c;行业专家、领军企业代表等人物齐聚一堂&#xff0c;共话 IoT 未来趋势。KaiwuDB 受邀亮相参展并就《工业物联网产业数字化转型…

CRF条件随机场的原理、例子、公式推导和应用

转子&#xff1a;https://zhuanlan.zhihu.com/p/148813079 条件随机场&#xff08;Conditional Random Field&#xff0c;CRF&#xff09;是自然语言处理的基础模型&#xff0c;广泛应用于中文分词、命名实体识别、词性标注等标注场景。 条件随机场CRF与深度学习结合&#xf…

如何使用Github搭建个人博客

介绍 在本文中&#xff0c;我将介绍如何使用GitHub搭建个人博客&#xff08;免费&#xff09;。GitHub是一个功能强大的版本控制和协作平台&#xff0c;它也可以用来托管和发布静态网页。通过将你的个人博客托管在GitHub上&#xff0c;你可以享受到版本控制的好处&#xff0c;…

抖音自动生成视频、字幕、自动上传发布

dy-auto ✨ 抖音自动生成视频、字幕、自动上传发布✨ 项目地址 点击进入https://github.com/Richard0403/dy-auto 录屏效果 https://github.com/Richard0403/dy-auto/assets/14147304/21400a42-9296-4956-9517-ced8d8bf4737 技术架构 名称功能ffmpeg处理视频的生成&…

大模型LLM领域,有哪些可以作为学术研究方向?

清湛人工智能研究院 2023-05-31 09:23 发表于江苏 编者&#xff1a;本文转载了清华大学计算机系刘知远教授对大模型的一些思索&#xff0c;以飨读者。 刘知远 CCF 高级会员&#xff0c;CCCF 前编委。清华大学计算机系副教授、博士生导师。已在ACL、IJCAI、AAAI等人工智能领域…

【sentinel】Sentinel规则的持久化

Sentinel规则的推送有下面三种模式: 推送模式说明优点缺点原始模式API将规则推送至客户端并直接更新到内存中简单&#xff0c;无任何依赖不保证一致性&#xff1b;规则保存在内存中&#xff0c;重启即消失。严重不建议用于生产环境Pull模式扩展写数据源&#xff08;WritableDa…

初学Nginx要掌握哪些概念

文章目录 为什么要使用Nginx&#xff1f;什么是Nginx&#xff1f;Nginx的作用&#xff1f;反向代理负载均衡动静分离 为什么要使用Nginx&#xff1f; 小公司项目刚刚上线的时候&#xff0c;并发量小&#xff0c;用户使用的少&#xff0c;所以在低并发的情况下&#xff0c;一个…

【链表复习】C++ 链表复习及题目解析 (2)

目录 牛客 CM11 链表分割 牛客 OR36 之链表的回文结构 Leetcode 160. 相交链表 LeetCode 141. 环形链表 LeetCode 138. 复制带随机指针的链表 本文继续延续前文&#xff0c;为大家带来几道经典的链表中等难度的题目。 牛客 CM11 链表分割 现有一链表的头指针 ListNode* p…

GUT|IF30+的联合分析文章:宏基因加代谢组

● 代谢组学是基于LC-MS/MS液质联用技术对生物样本中的小分子代谢物进行定性和相对定量分析&#xff1b; ● 宏基因组-代谢组的联合分析可以用来解释差异菌群与差异代谢物的关联性&#xff1b; ● 从而帮助建立微生物-代谢物-表型之间的逻辑关系。 凌恩生物的宏基因组学引入了…

JDK21要来了,并发编程更加丝滑了

大家好&#xff0c;我是风筝&#xff0c;公众号「古时的风筝」&#xff0c;专注于 Java技术 及周边生态。 我的个人网站&#xff1a;古时的风筝 目前 Java 的最新稳定版是 JDK 20&#xff0c;但这是个过渡版&#xff0c;JDK21就是 LTS 版的了&#xff0c;也快要发布了&#xff…

经典文献阅读之--A Review of Motion Planning(轨迹规划回顾)

0. 简介 对于自动驾驶以及机器人而言&#xff0c;除了SLAM以外&#xff0c;另一个比较重要的部分就是轨迹规划了。而最近作者看到了几篇比较好的文章&#xff0c;分别为《A Review of Motion Planning Techniques for Automated Vehicle》、《A review of motion planning alg…

Python中处理无效数据的详细教程(附案例实战)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

IDEA全局设置JDK、Maven、编码格式

本机已安装JDK版本&#xff1a; 本机已安装Maven版本&#xff1a; 一、IDEA设置全局JDK设置 File---->New Projects Settings---->Structure for New Projects... 先将本地安装的JDK添加到SDK 将项目SDK设置为刚刚添加的本地JDK版本 File---->New Projects Settings-…

8分钟让你完全掌握代理IP基础知识和实际应用

概念 代理IP可以理解为一个中转服务器&#xff0c;将用户和目标服务器之间的请求和响应进行转发和代理。使用代理IP的主要目的是隐藏用户的真实IP地址、访问被限制的内容、提高网络连接速度和保护用户隐私。 目录 概念 一、代理IP的工作原理 二、代理IP的类型 三、为什么…

Docker安装ClickHouse22.6.9.11并与SpringBoot、MyBatisPlus集成

背景 上一篇文章CentOS6.10上离线安装ClickHouse19.9.5.36并修改默认数据存储目录记录了在旧版的操作系统上直接安装低版本 ClickHouse &#xff08;脱胎于俄罗斯头号搜索引擎的技术&#xff09;的过程&#xff0c;开启远程访问并配置密码&#xff1b; 其实通过 Docker 运行 …

ESXi 7.0 U3m Cisco (思科) 定制版 OEM Custom Installer CD

VMware ESXi 7.0 Update 3m - 领先的裸机 Hypervisor (All OEM Customized Installer CDs) ESXi 7.0 U3m Standard (标准版) ESXi 7.0 U3m Dell (戴尔) 定制版 OEM Custom Installer CD ESXi 7.0 U3m HPE (慧与) 定制版 OEM Custom Installer CD ESXi 7.0 U3m Lenovo (联想) 定…