Comment 0 for bug 1661510

JiaJunsu (jiajunsu) wrote :

If neutron agent get started before server, the agents' report_state messages may be trashed by RabbitMQ server.

Oslo.messaging only declare exchange but not queue when send a 'topic' message[1]. In RabbitMQ-server's tutorials, it said 'If we send a message to non-existing location, RabbitMQ will just trash the message'[2].

We've found this may make agents' messages get lost when server is not started. The worse thing is that the agents will wait for those messges until getting timeout. We hope agents to report_state as soon as server getting started.

There are three optional way to solve this:
1.Do not declare exchange when sending 'topic' messages, we will get exception if msg is sent to non-existing exchange.
2.Make sure the queue is exist before sending messages, and raise QueueNotFound exception if we found queue non-existing.
3.Declare the queue before sending messages, just like what notify_send do.

[1]https://github.com/openstack/oslo.messaging/blob/master/oslo_messaging/_drivers/impl_rabbit.py#L1276
[2]https://www.rabbitmq.com/tutorials/tutorial-one-python.html