如何解决Mautic集成AWS MQ(RabbitMQ)时的"Invalid frame type 21"错误
问题:AWS MQ(RabbitMQ)与Mautic集成的SSL连接配置问题
已更新Mautic的local.php配置文件,填入RabbitMQ相关信息:
'queue_protocol' => 'rabbitmq', 'rabbitmq_host' => '*', 'rabbitmq_port' => '5671', 'rabbitmq_vhost' => '/', 'rabbitmq_user' => '*', 'rabbitmq_password' => '*', 'rabbitmq_idle_timeout' => 0, 'rabbitmq_idle_timeout_exit_code' => 0,
但发送邮件时出现以下错误:
[2023-06-22 11:54:13] mautic.CRITICAL: Uncaught PHP Exception PhpAmqpLib\Exception\AMQPInvalidFrameException: "Invalid frame type 21" at /var/www/html/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AbstractConnection.php line 600 {"exception":"[object] (PhpAmqpLib\\Exception\\AMQPInvalidFrameException(code: 0): Invalid frame type 21 at /var/www/html/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AbstractConnection.php:600)"} {"hostname":"ip-10-1-1-94.eu-west-1.compute.internal","pid":984}
AWS MQ端日志显示:
2023-06-22 11:45:59.217872+00:00 [notice] <0.4922.0> TLS server: In state hello at tls_record.erl:564 generated SERVER ALERT: Fatal - Unexpected Message 2023-06-22 11:45:59.217872+00:00 [notice] <0.4922.0> - {unsupported_record_type,65}
推测问题为Mautic使用非SSL连接,而AWS MQ强制要求SSL连接,需配置Mautic启用SSL队列连接。
解决方案
要让Mautic启用SSL连接AWS MQ的RabbitMQ,需在local.php中添加以下SSL相关配置项:
- 添加
'rabbitmq_use_ssl' => true,:明确开启SSL连接 - 添加
'rabbitmq_ssl_options'数组,配置SSL验证参数(匹配AWS MQ要求)
修改后的完整配置示例:
'queue_protocol' => 'rabbitmq', 'rabbitmq_host' => '*', 'rabbitmq_port' => '5671', 'rabbitmq_vhost' => '/', 'rabbitmq_user' => '*', 'rabbitmq_password' => '*', 'rabbitmq_idle_timeout' => 0, 'rabbitmq_idle_timeout_exit_code' => 0, 'rabbitmq_use_ssl' => true, 'rabbitmq_ssl_options' => [ 'verify_peer' => true, 'verify_peer_name' => true, 'allow_self_signed' => false, // AWS MQ使用官方可信证书,无需允许自签 'cafile' => '/path/to/aws-root-ca.pem' // 可选,若服务器无法自动识别AWS根证书,需指定证书路径 ],
配置说明:
rabbitmq_use_ssl:设为true强制使用SSL连接,匹配AWS MQ的5671端口要求rabbitmq_ssl_options:verify_peer和verify_peer_name:开启服务器证书验证,保障连接安全性allow_self_signed:AWS MQ提供的是正规可信证书,设为false即可cafile:若服务器无法自动读取系统信任的根证书,可下载AWS根CA证书后指定其本地路径
配置完成后,重启Mautic服务,再尝试发送邮件验证连接是否正常。
内容的提问来源于stack exchange,提问作者Halil
相关产品推荐
相关产品推荐

