2017-04-20 506 views
1

我想從使用rabbitmq的HTTP API的隊列中獲取一些消息。RabbitMQ - 使用curl從隊列中獲取消息

我在here 我沒有配置文件vhost

我嘗試以下的curl命令:

curl -i -u guest:guest -H "content-type:application/json" -X POST http://127.0.0.1:15672/api/queues/foo/get -d'{"count":5,"requeue":true,"encoding":"auto","truncate":50000}' 

RabbitMQ的,然後回答:

HTTP/1.1 405 Method Not Allowed 
vary: origin 
Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact) 
Date: Thu, 20 Apr 2017 08:03:28 GMT 
Content-Length: 66 
Allow: HEAD, GET, PUT, DELETE, OPTIONS 

{"error":"Method Not Allowed","reason":"\"Method Not Allowed\"\n"} 

你能指出我的錯誤?我怎樣才能得到這些消息?

回答

1

我設法解決這個問題。關鍵:

我沒有配置vhost。

RabbitMQ使用默認VHOST的「/」符號。

enter image description here

「/」 被轉化爲HTTP %2F ...

所以正確的調用是:

curl -u guest:guest -i -H "content-type:application/json" -X POST http://127.0.0.1:15672/api/queues/%2F/foo/get -d'{"count":5,"requeue":true,"encoding":"auto","truncate":50000}' 
3

你缺少的隊列名稱:

curl -i -u guest:guest -H "content-type:application/json" -X POST http://127.0.0.1:15672/api/queues/foo/my_queue/get -d'{"count":5,"requeue":true,"encoding":"auto","truncate":50000}' 

其中foo是虛擬主機,my_queue是隊列名稱。

的結果是:

[ 
    { 
     "payload_bytes":4, 
     "redelivered":true, 
     "exchange":"", 
     "routing_key":"my_queue", 
     "message_count":5, 
     "properties":{ 
     "delivery_mode":1, 
     "headers":{ 

     } 
     }, 
     "payload":"test", 
     "payload_encoding":"string" 
    }, 
    { 
     "payload_bytes":4, 
     "redelivered":true, 
     "exchange":"", 
     "routing_key":"my_queue", 
     "message_count":4, 
     "properties":{ 
     "delivery_mode":1, 
     "headers":{ 

     } 
     }, 
     "payload":"test", 
     "payload_encoding":"string" 
    }, 
    { 
     "payload_bytes":4, 
     "redelivered":true, 
     "exchange":"", 
     "routing_key":"my_queue", 
     "message_count":3, 
     "properties":{ 
     "delivery_mode":1, 
     "headers":{ 

     } 
     }, 
     "payload":"test", 
     "payload_encoding":"string" 
    }, 
    { 
     "payload_bytes":4, 
     "redelivered":true, 
     "exchange":"", 
     "routing_key":"my_queue", 
     "message_count":2, 
     "properties":{ 
     "delivery_mode":1, 
     "headers":{ 

     } 
     }, 
     "payload":"test", 
     "payload_encoding":"string" 
    }, 
    { 
     "payload_bytes":4, 
     "redelivered":true, 
     "exchange":"", 
     "routing_key":"my_queue", 
     "message_count":1, 
     "properties":{ 
     "delivery_mode":1, 
     "headers":{ 

     } 
     }, 
     "payload":"test", 
     "payload_encoding":"string" 
    } 
] 

編輯

如果您使用的是默認的虛擬主機:

curl -i -u guest:guest -H "content-type:application/json" -X POST http://127.0.0.1:15672/api/queues/%2f/my_queue/get -d'{"count":5,"requeue":true,"encoding":"auto","truncate":50000}'