栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

基于docker安装rabbitmq,amqp扩展

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于docker安装rabbitmq,amqp扩展

rabbitmq安装

1.Docker拉取rabbitmq镜像:

 docker pull rabbitmq

2.构建rabbitmq容器

docker run -p 5672:5672 -p 15672:15672 -d --name rabbitmq 
-v /docker/rabbitmq:/var/lib/rabbitmq 
--privileged=true 
--hostname myRabbitmq 
-e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin 
-e RABBITMQ_DEFAULT_PASS=admin rabbitmq:latest

3.进入rabbitmq容器安装可视化界面:rabbitmq_management

rabbitmq-plugins enable rabbitmq_management

4.回到宿主机,查看防火墙是否关闭,服务器查看安全组端口是否开放

systemctl status firewalld   

systemctl stop firewalld

5.访问 youhost:15672 可以看到rabbitmq可视化工具的登陆界面,使用上面设置的账号密码登陆即可。

php安装amqp扩展协议 rabbitmq-c依赖和amqp扩展安装

1.拉取amqp-1.10.2.tgz包

http://pecl.php.net/package/amqp/1.10.2

2.拉取rabbitmq-c.tar.gz包

https://github.com/alanxz/rabbitmq-c/releases/download/v0.8.0/rabbitmq-c-0.8.0.tar.gz 

3.安装rabbitmq-c依赖

tar zxf rabbitmq-c-0.8.0.tar.gz

cd rabbitmq-c-0.8.0

./configure --prefix=/usr/local/rabbitmq-c

echo $?

make && make install

4.先进入php容器安装amqp扩展 这里使用源码编译安装amqp扩展 -> 准备扩展包 ->进入安装目录

tar zxf amqp-1.10.2.tgz

cd amqp-1.10.2.tgz

phpize

./configure --with-php-config=/usr/local/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c/

5.先从 rabbitmq-c 编译的依赖中复制 amqp_ssl_socket.h 到 **amqp-1.10.2 **中

cd /rabbitmq/rabbitmq-c-0.8.0/librabbitmq

cp amqp_ssl_socket.h /rabbitmq/amqp-1.10.2

6.回到 amqp-1.10.2 中执行编译

make && make install

7.php.ini中添加配置

extension=amqp.so
laravel中使用rabbitmq

1.拉取composer包

composer require vladimir-yuldashev/laravel-queue-rabbitmq

2.在laravel的 config/queue.php 文件中配置信息

'rabbitmq' => [
            'driver' => 'rabbitmq',
            'queue' => env('RABBITMQ_QUEUE', 'default'),
            'connection' => PhpAmqpLibConnectionAMQPLazyConnection::class,

            'hosts' => [
                [
                    'host' => env('RABBITMQ_HOST', '127.0.0.1'),
                    'port' => env('RABBITMQ_PORT', 5672),
                    'user' => env('RABBITMQ_USER', 'guest'),
                    'password' => env('RABBITMQ_PASSWORD', 'guest'),
                    'vhost' => env('RABBITMQ_VHOST', '/'),
                ],
            ],

            'options' => [
                'ssl_options' => [
                    'cafile' => env('RABBITMQ_SSL_CAFILE', null),
                    'local_cert' => env('RABBITMQ_SSL_LOCALCERT', null),
                    'local_key' => env('RABBITMQ_SSL_LOCALKEY', null),
                    'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true),
                    'passphrase' => env('RABBITMQ_SSL_PASSPHRASE', null),
                ],
                'queue' => [
                    'job' => VladimirYuldashevLaravelQueueRabbitMQQueueJobsRabbitMQJob::class,
                ]
            ],

            
            'worker' => env('RABBITMQ_WORKER', 'default'),
        ]

3…env文件配置

.env文件中
# 默认使用rabbitmq队列
QUEUE_CONNECTION=rabbitmq
# 使用的队列驱动
QUEUE_DRIVER=rabbitmq
# mq的ip地址
RABBITMQ_HOST=172.17.0.10
# mq的端口
RABBITMQ_PORT=5672
# mq的账号
RABBITMQ_USER=admin
# mq的密码
RABBITMQ_PASSWORD=admin
# 默认的虚拟主机
RABBITMQ_VHOST=my_vhost
# 默认队列名称
RABBITMQ_QUEUE=test
测试

1.新建rabbit_consumer.php作为消费者

 '127.0.0.1',  
    'port' => '5672',  
    'login' => 'guest',  
    'password' => 'guest', 
    'vhost'=>'/' 
);   
$e_name = 'e_linvo'; //交换机名 
$q_name = 'q_linvo'; //队列名 
$k_route = 'key_1'; //路由key 
 
//创建连接和channel 
$conn = new AMQPConnection($conn_args);   
if (!$conn->connect()) {   
    die("Cannot connect to the broker!n");   
}   
$channel = new AMQPChannel($conn);   
 
//创建交换机    
$ex = new AMQPExchange($channel);   
$ex->setName($e_name); 
$ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型  
$ex->setFlags(AMQP_DURABLE); //持久化 
echo "Exchange Status:".$ex->declare()."n";   
   
//创建队列    
$q = new AMQPQueue($channel); 
$q->setName($q_name);   
$q->setFlags(AMQP_DURABLE); //持久化  
echo "Message Total:".$q->declare()."n";   
 
//绑定交换机与队列,并指定路由键 
echo 'Queue Bind: '.$q->bind($e_name, $k_route)."n"; 
 
//阻塞模式接收消息 
echo "Message:n";   
while(True){ 
    $q->consume('processMessage');   
    //$q->consume('processMessage', AMQP_AUTOACK); //自动ACK应答  
} 
$conn->disconnect();   
 
 
function processMessage($envelope, $queue) { 
    $msg = $envelope->getBody(); 
    echo $msg."n"; //处理消息 
    $queue->ack($envelope->getDeliveryTag()); //手动发送ACK应答 
}
?>
  1. 新建rabbit_publisher.php作为生产者
 '127.0.0.1',  
    'port' => '5672',  
    'login' => 'guest',  
    'password' => 'guest', 
    'vhost'=>'/' 
);   
$e_name = 'e_linvo'; //交换机名 
//$q_name = 'q_linvo'; //无需队列名 
$k_route = 'key_1'; //路由key 
 
//创建连接和channel 
$conn = new AMQPConnection($conn_args);   
if (!$conn->connect()) {   
    die("Cannot connect to the broker!n");   
}   
$channel = new AMQPChannel($conn);   
 
 
 
//创建交换机对象    
$ex = new AMQPExchange($channel);   
$ex->setName($e_name);   

date_default_timezone_set("Asia/Shanghai");

//发送消息 
//$channel->startTransaction(); //开始事务  
for($i=0; $i<5; ++$i){ 
    sleep(1);//休眠1秒
    //消息内容 
    $message = "TEST MESSAGE!".date("h:i:sa");   
    echo "Send Message:".$ex->publish($message, $k_route)."n";  
} 
//$channel->commitTransaction(); //提交事务 
 
$conn->disconnect();
?>
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/828312.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号