defined by AMQP 0-9-1 • Supports other protocols with Plugins: AMQP 1.0, HTTP, MQTT, STOMP, XMPP, UDP, WebStomp, and more • Written in Erlang/OTP, is Open Source (MPL), and is developed/maintained by Pivotal
write operations • Communicate across application platforms • Tap into pre-existing message flow for new purposes • Scale-out clustering for growth, throughput & HA • Federation for WAN latencies & network partitions
against binding keys by exchanges • Example uses of a Routing Key: • Connotate the type of message • Designate the destination of a message • Categorize the content in the message
No routing key, messages sent to all bound queues Topic Pattern matching in Routing Key Headers No routing key, string matching in the message headers property
Receive all messages in the namespace namespace.delimited.* Receive all namespace.delimited messages namespace.*.keys Receive all namespace messages ending in keys
hashed value Pulse Publish internal RabbitMQ metrics via AMQP Random Distribute messages across all bound queues randomly Recent History Stores last 20 messages to any bound queue Riak Storage Store received messages in Riak" Script Exchange Calls out to external scripts for routing behavior
Publishes body only AMQP messages • Transactional publishing via amqp.publish • Non-transactional via amqp.autonomous_publish • Needs some love for additional features
received notifications to bound queues • When routing messages, bindings are checked for the routing key to match the NOTIFY channel • Unobtrusive to PostgreSQL environment, native constructs for publishing messages • Requires PostgreSQL 9.0 and greater • Body only messages*
postgres=# LISTEN channel_name; ! (after NOTIFY issued) ! Asynchronous notification "channel_name" with payload "Test notification" received from server process with PID 16749.