2017-02-23 198 views
1

我已经按照this文章成功安排了邮件,但是当我将延迟邮件发布到绑定队列时。我无法立即在队列中看到消息。 x-delayed-type交换插件缓冲的消息在某处直到时间到了。查看RabbitMQ管理界面中的延迟邮件

是否有反正(配置)在延迟时间到期之前在管理插件中看到这些延迟的消息?

+0

文章链接丢失 – cantSleepNow

+1

对不起,我已经编辑了问题,现在 –

回答

2

延迟信息都存储在Mnesia,如:

enter image description here

所以你不能看到它的管理界面内。

编辑

您使用云:

rabbitmqctl eval 'ets:tab2list([email protected]_HOST_NAME).'

例如: ➜ sbin ./rabbitmqctl eval 'ets:tab2list([email protected]).' [{delay_entry, {delay_key,1487934959224, {exchange, {resource,<<"/">>,exchange,<<"my-exchange">>}, 'x-delayed-message',true,false,false, [{<<"x-delayed-type">>,longstr,<<"direct">>}], undefined,undefined, {[],[]}}}, {delivery,false,false,<10495.911.0>, {basic_message, {resource,<<"/">>,exchange,<<"my-exchange">>}, [<<>>], {content,60, {'P_basic',undefined,undefined, [{<<"x-delay">>,signedint,90000}], undefined,undefined,undefined,undefined,undefined, undefined,undefined,undefined,undefined,undefined, undefined}, <<32,0,0,0,0,13,7,120,45,100,101,108,97,121,73,0,1,95,144>>, rabbit_framing_amqp_0_9_1, [<<"delayed payload">>]}, <<174,59,245,237,135,189,175,240,121,105,31,191,47,97,189,156>>, false}, undefined,noflow}, #Ref<10495.0.1.3514>},

(在playload可能是不可读)

EDIT2

此功能将可为首发版本3.7.0

https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/issues/3

+0

谢谢你的答案,我不知道是否有任何可视化或管理工具看到Mnesia的延迟消息的Windows? –

+0

你在我的答案中看到的是'observer'工具,是erlang的调试工具。 有没有可视化工具,你可以通过使用'rabbitmqctl eval ......'来查询mensia talbe现在我不记得erlang命令了。 :( – Gabriele

+0

感谢您的关注,我会搜索该问题 –

0

如果你真的需要查看您在管理UI消息,如果你不能等待3.7.0如前所述通过Gabriele,您可以忽略该插件,而是将TTL和DLX结合在一起以延迟消息传递。

您可以将消息发布到将在TTL之后过期消息的队列(并且您可以从该队列中查看消息)。然后,您可以使用死信路由密钥将消息重新路由到交换机,以便消息以您使用的队列结尾,如所述。

# declare a queue with the DELAYED_QUEUE name 
ch.queue(DELAYED_QUEUE, arguments: { 
    # set the dead-letter exchange to the default queue 
    'x-dead-letter-exchange' => '', 
    # set the routing key into the destination queue name 
    'x-dead-letter-routing-key' => DESTINATION_QUEUE, 
    # the time in milliseconds to keep the message in the queue 
    'x-message-ttl' => 3000 
}) 
# publish to the default exchange with the the delayed queue name 
# as routing key, so that the message ends up in the delayed queue 
ch.default_exchange.publish 'message content', routing_key: DELAYED_QUEUE