注册消费者时的例外504

时间:2018-04-23 12:04:40

标签: symfony rabbitmq

我一直在使用Symfony 2.7和RabbitMQBundle来异步处理一些长进程。 在面对几分钟后MySQL连接中断的问题后,我发现了rabbitmq-cli-consumer,这是Go中的一个小应用程序,用于处理队列,并将其内容提供给命令。

就我而言,我使用此命令:./rabbitmq-cli-consumer -c configuration-stock.conf --include -V -e 'php app/console amqp:consume:stock --env=prod -vvv',使用此配置文件:

[rabbitmq]
host = HOST
username = USERNAME
password = PASSWORD
vhost=/VHOST
port=PORT
queue=stock
compression=Off

[exchange]
name=exports
type=direct
durable=On

[queuesettings]
routingkey=stock
messagettl=10000
deadLetterExchange=exports.dl
deadLetterroutingkey=stock
priority=10

为了处理错误,我打算使用RabbitMQ的x-dead-letter-exchangex-dead-letter-routing-key配置,以便稍后能够重试该消息(如果出现临时错误的话)。

我的问题是,当我在RabbitMQBundle的配置中定义队列时,rabbitmq-cli-consumer无法使用队列,抛出此错误:

2018/04/23 11:35:54 Connecting RabbitMQ...
2018/04/23 11:35:54 Connected.
2018/04/23 11:35:54 Opening channel...
2018/04/23 11:35:54 Done.
2018/04/23 11:35:54 Setting QoS... 
2018/04/23 11:35:54 Succeeded setting QoS.
2018/04/23 11:35:54 Declaring queue "stock"...
2018/04/23 11:35:54 Registering consumer... 
2018/04/23 11:35:54 failed to register a consumer: Exception (504) Reason: "channel/connection is not open"

以下是我用于RabbitMQBundle的配置:

old_sound_rabbit_mq:
    producers:
        exports:
            connection: default
            exchange_options:
                name: 'exports'
                type: direct
        exports_dl:
            connection: default
            exchange_options:
                name: 'exports.dl'
                type: direct

    consumers:
        stock_dead_letter:
            connection: default
            exchange_options:
                name: exports.dl
                type: direct
            queue_options:
                name: stock.dl
                routing_keys:
                    - stock
                arguments:
                    x-dead-letter-exchange: ['S', 'exports']
                    x-dead-letter-routing-key: ['S', 'stock']
                    x-message-ttl: ['I', 60000]
            callback: amqp.consumers.exports.stock

    multiple_consumers:
        exports:
            connection: default
            exchange_options:
                name: 'exports'
                type: direct
            queues:
                stock:
                    name: stock
                    callback: amqp.consumers.exports.stock
                    routing_keys:
                        - stock
                    arguments:
                        x-dead-letter-exchange: ['S', 'exports.dl']
                        x-dead-letter-routing-key: ['S', 'stock']

有没有人遇到过类似的东西?你是怎么解决的?

0 个答案:

没有答案