从PHP通过AMQPS连接到RabbitMQ


这些天我处理了很多数据,队列是我的应用程序的一个常见的附加功能,可以在应用程序之间移动数据。目前,我正和拉比一起工作(并且很喜欢它!),但我想部署到托管的RabbitMQ服务中,并努力寻找通过SSL实现这一点的例子——所以我想分享一下对我有用的东西。免责声明:我为IBM工作,他们拥有Compose.com,这意味着我有一个“做任何你喜欢的事情!”账户在那里。

收集配置和证书

RabbitMQ的配置通常是以网址的形式——从撰写来看,我的配置是这样的:

amqps://[username]:[password]@sl-eu-lon-2-portal.2.dblayer.com:10406/lj-brilliant-rabbitmq


然而,PHP库期望有六个独立的参数:

  • 宿主
  • 港口
  • 用户名
  • 密码
  • Vhost(如“lj-brilliant-rabbitmq”)
  • Ssl _选项

我们还需要把SSL的各个部分整理好。合成使用了一个SSL证书,所以我把它保存到了一个名为certrabbit和我的PHP脚本在同一个目录中。

现在是PHP代码

为此,我使用了php-amqplib包,用Composer安装。

我不知道为什么PHP库不喜欢通过URL连接,而所有其他语言似乎都希望这样,但是我们需要做的是使用AMQPS而不是AMQPAMQPSSLConnection而不是AMQPStreamConnection当我们连接到RabbitMQ时—然后包括SSL配置。

下面是我的应用程序中允许我连接的代码:

<?php
// include the composer autoloader
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPSSLConnection;
use PhpAmqpLib\Message\AMQPMessage;

// uncomment this if you need to inspect all AMQP traffic (it's noisy!)
// define('AMQP_DEBUG', true);

$ssl_options = array(
  'capath' => '/etc/ssl/certs',
  'cafile' => './certrabbit', // my downloaded cert file
  'verify_peer' => true,
);

$connection = new AMQPSSLConnection(
  'sl-eu-lon-2-portal.2.dblayer.com',
  10406,
  'lorna',
  'secret',
  'lj-brilliant-rabbitmq',
  $ssl_options);

$channel = $connection->channel();



如果成功,您应该能够检查$channel看到它是一个PhpAmqpLib\Channel\AMQPChannel可以继续使用的对象。

对于非PHP语言,您通常可以用amqps://前缀,但是还有这个article on how to connect从一堆受欢迎的lib中。