Add RabbitMQ service.

Creating temp pull request so we can keep all the updates in one spot and add comments.
Good! This is exactly what we said. Using the promises will create an internal queue in case the connection is not ready yet. The only question is, what happens if the connection drops? How do we reconnect?