[rabbitmq-discuss] Question/clarification wrt durable messages
parki at whatevernot.com
Thu Dec 16 20:03:33 GMT 2010
Spending time getting up to speed with RabbitMQ - have things working - very impressed - all's working pretty well, but there are some subtleties I'm trying to figure out, mainly related to durability.
Quick question about durability of messages - I'm missing something, I think.
Let's say that I have a queue set up as durable, non-exclusive, non-auto-delete:
channel.queueDeclare("testQueue", true, false, false, null);
and have this queue bound to an exchange (binding key = routing key).
I would expect that:
channel.basicPublish(exchangeName, routingKey, null, messageString.getBytes());
would result in a message being published in a non-durable fashion (as the properties are null), whereas:
channel.basicPublish(exchangeName, routingKey, MessageProperties.PERSISTENT_TEXT_PLAIN, messageString.getBytes());
would result in a durable publish.
However, as near as I can tell, there is no difference - in both cases, the message remains in the queue until a consumer comes and retrieves it. Is there a difference in this case?
So, I figured that perhaps the second case (PERSISTENT_TEXT_PLAIN) results in the message being available after a server crash (which makes sense). So, I publish a message with PERSISTENT_TEXT_PLAIN and then kill the server and re-launch it; I don't see the message being available - the server comes up without this message in the queue.
Can anyone shed light on what I'm missing?
Perhaps it's more useful to outline what my use case is - I need to have high availability, and so can form a multi-node broker, but since the queues are (currently) tied to a node, if a node goes down, I lose the queue (and all the messages in that queue). How does one design this setup in RabbitMQ/AMQP - I'm guessing there's a pretty standard pattern here (?).
Any help is appreciated - everything else is looking really good - things Just Work.
ps. I'm using the whizzy mgmt web front end; when I launch the server, I see some warnings about undefined functions (see below). Is this something I should worry about?
rabbit: sudo /opt/local/sbin/rabbitmq-server
Activating RabbitMQ plugins ...
*WARNING* Undefined function fdsrv:bind_socket/2
*WARNING* Undefined function fdsrv:start/0
*WARNING* Undefined function fdsrv:stop/0
*WARNING* Undefined function webmachine_resource:start_link/2
6 plugins activated:
More information about the rabbitmq-discuss