文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

我最近工作中需要处理大量数据,所以队列就成了一个跨程序搬运数据的扩展。这期间我选择了RabbitMQ(爱死他了),但是我想要在机器上部署RabbitMQ服务并且找一个工作在SSL下的例子的时候发现很困难,所以我想分享一下我是如何做到的。免责声明:我在IBM工作,并且使用我们自己的Compose.com,这也就意味着我有一个“做什么都可以”的账户。

配置和证书

RabbitMQ的配置通常是以下格式的URL----在Compose中,我的大概是这样的:

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

PHP的库需要大概下面这六个参数

  • 主机
  • 端口
  • 用户名
  • 密码
  • 虚拟机(本例中为:lj-brilliant-rabbitmq)
  • SSL选项

我们当然也需要一堆SSL证书,Composes已经有了一个证书并且已经在使用了,所以我就把它保存在一个叫certrabbit的文件里了,文件和PHP脚本放在同一个目录。

第 1 段(可获 1.99 积分)

现在开始写PHP代码

这个例子里,我用Compose装了 php-amqplib包。

我不明白为什么PHP的库不喜欢像其他语言一样用URL连接,但是我们需要用AMQPS(AMQPSSLConnection )来替代AMQP(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://前缀的URL来连接,也有这样的文章来介绍怎么用一些流行的库来连接。

第 2 段(可获 1.7 积分)

文章评论