0.0
No release in over 3 years
There's a lot of open issues
Map out RabbitMQ topology with the use of routing key conventions and consumer tags.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

rabbitmq-graph

CircleCI Integration Test Maintainability Test Coverage

Discover RabbitMQ topology.

Assumptions

  • Routing keys are segmented with dots (.).

    Segment name Routing key Extracted Assumed to be
    from_app splitter.experiment.something.assigned splitted The name of the publishing application.
    entity splitter.experiment.something.assigned experiment The entity that is participating in the action.
    actions splitter.experiment.something.assigned something.assigned The action(s) describing the event.
  • Consumer tags are configured to contain the name of the consuming application.

How to run?

Without arguments bin/rabbitmq-graph will connect to localhost:15672 with the default guest user.

How to build/test?

Unit tests:

bundle install
bundle exec rspec

Integration:

docker run -d -p 15672:15672 -p 5672:5672 rabbitmq:3.9-management-alpine
export RABBITMQ_API_URI='http://guest:guest@localhost:15672'
export RABBITMQ_URI='amqp://guest:guest@localhost:5672'
bundle exec rspec --tag=integration
bundle exec bin/rabbitmq-graph

Configuration

Setting Configuration Effect Default
RabbitMQ management URL -uURL
--url=URL
or environment variable
RABBITMQ_API_URI
Specifies the connection URL to RabbitMQ management API http://guest:guest@localhost:15672/
Save topology --save-topology=FILE After discovery save the topology to the given file. disabled
Read topology --read-topology=FILE Skip discovery and use a stored topology file. disabled
Choose format --format=FORMAT Choose an output format. --help will give a list of available options. DotFormat

Dot format specific options

Setting Configuration Effect Default
Show only applications --dot-applications-only Creates a graph without entity nodes. disabled
Label details --dot-label-detail=DETAILS Comma separated segment names to display on labels drawn between applications and/or entities. 'actions'

Show only applications

  • enabled: will only show application to application relations.
  • disabled (default): will show application to entity to application relations. The edge going into the entity and coming out of the entity will have the same label.

Label details

Affects the labeling of edges:

  • 'entity,actions': displays the entity name and the actions on the edge.
  • 'entity': displays the entity name on the edge.
  • 'actions': displays the actions on the edge.
  • '' (empty string): displays no labels.

Any combination and order of the above is allowed.

Example

Running the discovery against a dockerised rabbitmq:3.9-management-alpine:

$ docker run --detach --publish 5672:5672 --publish 15672:15672 rabbitmq:3.9-management-alpine

$ RABBITMQ_API_URI=http://localhost:15672/ bin/rabbitmq-graph > test.dot
I, [2018-04-30T13:05:29.735060 #90042]  INFO -- : connecting to rabbitmq HTTP API (http://guest@127.0.0.1:15672/)
Discovering bindings: |================================================================================================|
Discovering queues: |==================================================================================================|

$ fdp -O -Tpng test.dot   # assumes "graphviz" is installed
$ open test.dot.png

How to configure consumer tags?

hutch

Hutch supports consumer tag prefixes since 0.24.