RabbitMQ
Production Setup
Our RabbitMQ dashboards are located here:
Credentials
All apps (and humans logging into RabbitMQ dashboard) use the same credentials which can be found in nypl-digital-dev’s parameter store in /production/mediaIngest/rabbitMQ/credentials
Exchanges & Queues
Rabbit Exchange Names
Name | Type |
---|---|
mediaIngest | fanout |
mmsObjectCreation.deadLetter | direct |
media.assetPushed | fanout |
automatically generated exchanges… | default |
Rabbit Queue Names
Queue | Bound To |
---|---|
media.FileStorePusher | mediaIngest |
media.S3Uploader | media.AssetPushed |
media.ingestReporter | media.AssetPushed |
media.MMSObjectCreator | mediaIngest |
media.MMSObjectCreator.deadLetter | default exchange |
media.JsonBagValidator | media.FileWatcherDetectedBag |
media.JsonBagValidator.deadLetter | default exchange |
Rabbit Importing Exporting RabbitMQ & Schema
RabbitMQ is persnickety about its setup. Clients (publishers and consumers) are required to be VERY declarative about the resources they connect to, and throw exceptions if there’s any mismatch between how its setup on the server and how the client’s code expects it to be setup.
Example of Persnickety-ness
A server is setup with a fanout exchange named “myExchange” and a queue named “myQueue” bound to it. A client gets instantiated expecting a direct exchange named “myExchange” and a queue named “myQueue” bound to it. The client will immediately throw an exception because the mismatch in exchange type.
It looks for, and freaks out about mismatches in features including, but not limited to:
- Queue’s properties (e.g.
durable
,x-dead-letter-exchange
,x-dead-letter-routing-key
) - Exchange properties (e.g.
durable
,Policy
,type
)
Importing / Exporting Production’s Schema
You can easily import production’s schema & setup via their API or rabbitmqadmin
CLI-tool.
A copy of production’s schema can be found here.
Doing this is the easiest way to mirror production’s schema on your localhost.
In the future, it would be useful to create a service that polls for changes in the schema and automatically
checks changes into source control.
Setting up locally
-
Install RabbitMQ via homebrew. See brew install’s post-install notes for configuring rabbit to start automatically.
-
Enable rabbitmq_management for a nice web interface to rabbit (guest/guest http://localhost:15672)
-
In the web admin create a user named “processor” with the password “processor” and a VHOST named “/processor”