我正在尝试设置优先级队列。没有优先级,它工作正常,但我需要确定消息的优先级。
我正在将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} }
在这种情况下,我没有任何错误,但是消息没有被使用。
有人知道如何发送优先级消息吗?
答案 0 :(得分:0)
您收到的消息是您尝试创建队列时发生的错误消息,但是该队列已经存在且具有不同的参数。您必须先删除队列,然后尝试运行程序。
答案 1 :(得分:0)
PRECONDITION_FAILED-虚拟主机'/'中队列'global'的等价arg'x-max-priority':什么都没有收到,但当前是'signedint'类型的值'10'
该消息表示您已经创建了global
队列,其最大优先级为10
,但是其他尝试将其声明为没有优先级。您必须同时查看生产者和使用者的代码,以确保如果他们声明此优先级队列,它们将使用完全相同的x-max-priority
参数。
注意: RabbitMQ团队监视rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。