基于docker部署rabbitMQ,php-amqp扩展

发布于:2023-02-08 ⋅ 阅读:(545) ⋅ 点赞:(0)

RabbitMQ部署

简介:

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。

消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。

参考文献 :

https://www.cnblogs.com/sgh1023/p/11217017.html

RabbitMQ的AMQP协议。

RabbitMQ采用了AMQP协议,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

在这里插入图片描述

  • 生产者(Producer):发送消息的应用。
  • 消费者(Consumer):接收消息的应用。
  • 队列(Queue):存储消息的缓存,一个队列queue存多条消息。
  • 消息(Message):由生产者通过RabbitMQ发送给消费者的信息,消息存储在消息队列queue中。
  • 连接(Connection):连接RabbitMQ和应用服务器的TCP连接(上图中发送消息和接收消息都是必须先建立连接的)。
  • 通道(Channel):连接里的一个虚拟通道。当你通过消息队列发送或者接收消息时,这个操作都是通过通道进行的。客户端可以建立多个信道,每个信道代表一个会话任务。
  • 交换机(Exchange):生产者发送消息是先发到交换机,再由交换机根据路由发送到队列里面,并最终保存在一个或者多个队列里面。如果路由不到,或者返回给生产者,或者直接丢弃。RabbitMQ常用的交换器常用类型有direct、topic、fanout、headers四种
  • 绑定(Binding):交换器和消息队列之间的虚拟连接,绑定中可以包含一个或者多个RoutingKey。
  • 路由键(Routing Key):路由键是供交换机查看并根据键来决定如何分发消息到列队的一个键。路由键可以说是消息的目的地址。路由键通常为一个“.”分割的字符串,例如“com.rabbitmq”。
  • 用户(Users):在RabbitMQ里,是可以通过指定的用户名和密码来进行连接的。每个用户可以分配不同的权限,例如读权限,写权限以及在实例里进行配置的权限。

注意:生产者在生产消息时,如果不存在指定队列,或者没有创建队列,或者队列存在但消息路由键和交换机与队列绑定的键 (路由规则 路 )不一致(直连交换机必须一致) 不 ,则消息会被交换机丢弃。

我们完全可以直接使用 Connection 就能完成信道的工作,为什么还要引入信道呢?

试想这样一个场景, 一个应用程序中有很多个线程需要从 RabbitMQ 中消费消息,或者生产消息,那么必然需要建立很多个 Connection,也就是许多个 TCP 连接。然而对于操作系统而言,建立和销毁 TCP 连接是非常昂贵的开销,如果遇到使用高峰,性能瓶颈也随之显现。 RabbitMQ 采用 TCP 连接复用的方式,不仅可以减少性能开销,同时也便于管理 。


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的docker 安装rabbitmq-c依赖和amqp扩展协议

先安装rabbitmq-c依赖

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.解压两个安装包,并把两个包上传到 phpdocker容器中(自定义一个位置上传,如:/package)

tar -zvxf amqp-1.11.0.tgz

tar -zvxf rabbitmq-c-0.8.0.tar.gz

docker cp amqp-1.11.0 php:/package/amqp-1.11.0

docker cp rabbitmq-c-0.8.0 php:/package/rabbitmq-c-0.8.0

4.进入php-docker容器安装rabbitmq-c依赖
注:如需药加载编译需要的gcc环境

apt -y install gcc autoconf automake make libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev
cd rabbitmq-c-0.8.0

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

echo $?

make && make install

在这里插入图片描述

在这里插入图片描述

amqp扩展安装

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

cd amqp-1.11.0

phpize

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

在这里插入图片描述

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

cd /package/rabbitmq-c-0.8.0/librabbitmq

cp amqp_ssl_socket.h /package/amqp-1.11.0/

在这里插入图片描述

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

make && make install

在这里插入图片描述

在这里插入图片描述

4.php.ini中添加配置

find / -name php.ini

extension=amqp.so

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

到此,安装成功

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到