AMQP消息队列-RabbitMQ-Symfony5全面开发

您需要登录后才可观看此视频

为了更好的为您提供服务,请您登录后再查看本课程。

立即登录 注册账号

要使用AMQP消息队列,首先要安装php-amqp扩展。我们可以在控制台中使用php -m,查看当前已经安装过的扩展。我这里已经安装过了amqp扩展,就不再进行安装了。

在本套课程我们将学习rabbitmq队列,我们使用docker的rabbitmq容器来提供消息队列服务。打开docker-compose.yaml配置文件,在services配置下,我们添加下面的配置。

#docker-compose.yaml

version: '3.7'
services:
    database:
        image: 'mysql:5.7'
        environment:
            MYSQL_ROOT_PASSWORD: password
            MYSQL_DATABASE: teebblog
        ports:
            # To allow the host machine to access the ports below, modify the lines below.
            # For example, to allow the host to connect to port 3306 on the container, you would change
            # "3306" to "3306:3306". Where the first port is exposed to the host and the second is the container port.
            # See https://docs.docker.com/compose/compose-file/#ports for more information.
            - '8888:3306'

    rabbitmq:
        image: 'rabbitmq:3.8-management'
        ports:
            - '5672:5672'
            - '15672:15672'

我们将使用rabbitmq3.8版本来进行学习,容器映射了两个端口。5672端口用于我们在配置文件中MESSENGER_TRANSPOST_DSN环境变量的设置 ,15672端口用于在浏览器中对消息队列进行管理。

打开底部控制台,我们输入docker compose up -d来启动容器。当前我们的容器已经启动了,我们可以在浏览器中来访问消息队列的管理端,输入localhost:15672。我们登录rabbitmq的管理端,用户名和密码都是guest

下面我们就可以对消息队列进行配置了,回到项目。我们打开.env文件,注释42行代码。我们启用AMQP队列,账户和密码都是guest。地址就是localhost:5672

回到浏览器,我们添加一篇文章,点击新增按钮,现在页面自动跳转到登录页面。回到项目,我们刚刚使用docker compose命令行重启了容器,那么我们的数据库就会重置。

打开数据库客户端,来刷新一下我们的表,现在我们的teebblog数据库中并没有任何表。我们需要重置一下数据库,输入symfony console doctrine:migrations:migrate,输入yes。执行完数据库的更改之后,运行symfony console doctrine:fixtures:load,我们来加载数据,输入yes。

回到浏览器,我们登录admin用户。新增一篇文章,文章的名称叫做Hello world。点击添加,我们当前没有启动consume命令行。回到浏览器,我们查看一下rabbitmq的管理端。

我们看到队列中增加了1条消息,我们点击exchanges,在exchanges中新增了一个交换机,交换机的类型是fanout类型,我们查看队列。这里有个messages队列,在队列中有一条消息没有被处理。

回到项目,我们启动consume命令行,输入symfony console messenger:consume -vv,我们选择0。现在messenger组件就会从队列中获取消息,在Handler的__invoke()方法中等待了10秒之后,对消息进行了处理,发送了一封邮件。

发送完邮件之后会通知队列,当前的消息已处理,回到浏览器。现在队列中就没有了消息,我们也成功的收到了一封邮件,使用messenger组件我们没有添加过多的配置,就快速的使用了AMQP队列。

当然rabbitmq有很多的使用模型,点击exchanges,这里messenger组件自动创建了fanout模型。在下节课,我们再来深入的学习一下AMQP队列。

课程讨论

当前内容评论功能已关闭。