RabbitMqBundle上的队列优先级的问题

时间:2019-01-12 14:36:26

标签: symfony rabbitmq

我正在尝试设置优先级队列。没有优先级,它工作正常,但我需要确定消息的优先级。

我正在将RabbitMqBundle 1.14和Rabbitmq-supervisor-bundle 3.1与RabbitMQ 3.5.7(Erlang 18.3)一起使用

这是config.yml:

old_sound_rabbit_mq:
    connections:
        default:
            host:     '127.0.0.1'
            port:     5672
            user:     'xxx'
            password: 'xxx'
            vhost:    '/'
            lazy:     false
            connection_timeout: 3
            read_write_timeout: 3

            # requires php-amqplib v2.4.1+ and PHP5.4+
            keepalive: false

            # requires php-amqplib v2.4.1+
            heartbeat: 0

            #requires php_sockets.dll
            use_socket: true # default false
    producers:
        global:
            connection:       default
            exchange_options: {name: 'global', type: direct}
            queue_options:
                name: global
    consumers:
        global:
            connection:       default
            exchange_options: {name: 'global', type: direct}
            queue_options:    {name: 'global', arguments: {'x-max-priority': ['I', 10]} }
            callback:         rabbitmq_simu_service

然后将邮件发送到队列:

$msg = array();
$msg['id'] = $id;
$msg['action'] = 'simu';
$additionalProperties = ['priority' => 4] ;  
$routing_key = '';
$this->container->get('old_sound_rabbit_mq.global_producer')->publish(serialize($msg), $routing_key , $additionalProperties);

发送消息时出现以下错误:

PRECONDITION_FAILED-虚拟主机'/'中队列'global'的等价arg'x-max-priority':什么都没有收到,但当前是'signedint'类型的值'10'

我也在config.yml中尝试过:

            queue_options:    {name: 'global', arguments: {'x-max-priority': 10} }

在这种情况下,我没有任何错误,但是消息没有被使用。

有人知道如何发送优先级消息吗?

2 个答案:

答案 0 :(得分:0)

您收到的消息是您尝试创建队列时发生的错误消息,但是该队列已经存在且具有不同的参数。您必须先删除队列,然后尝试运行程序。

答案 1 :(得分:0)

  

PRECONDITION_FAILED-虚拟主机'/'中队列'global'的等价arg'x-max-priority':什么都没有收到,但当前是'signedint'类型的值'10'

该消息表示您已经创建了global队列,其最大优先级为10,但是其他尝试将其声明为没有优先级。您必须同时查看生产者使用者的代码,以确保如果他们声明此优先级队列,它们将使用完全相同的x-max-priority参数。


注意: RabbitMQ团队监视rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。