Awesome Open Source
Awesome Open Source

GarageMQ Build Status Coverage Status Go Report Card

GarageMQ is a message broker that implement the Advanced Message Queuing Protocol (AMQP). Compatible with any AMQP or RabbitMQ clients (tested streadway/amqp and php-amqp lib)

Table of Contents

Goals of this project

  • Have fun and learn a lon
  • Implement AMQP message broker in Go
  • Make protocol compatible with RabbitMQ and standard AMQP 0-9-1.


Simple demo server on Digital Ocean, 2 GB Memory / 25 GB Disk / FRA1 - Ubuntu Docker 17.12.0~ce on 16.04

Server Port Admin port Login Password Virtual Host 5672 15672 guest guest /

Installation and Building


The quick way to start with GarageMQ is by using docker. You can build it by your own or pull from docker-hub

docker pull amplitudo/garagemq
docker run --name garagemq -p 5672:5672 -p 15672:15672 amplitudo/garagemq


go get -u
cd $GOPATH/src/
docker build -t garagemq .
docker run --name garagemq -p 5672:5672 -p 15672:15672 garagemq

Go get

You can also use go get: go get -u

go get -u
cd $GOPATH/src/
make build.all && make run

Execution flags

Flag Default Description ENV
--config default config Config path GMQ_CONFIG
--log-file stdout Log file path or stdout, stderr GMQ_LOG_FILE
--log-level info Logger level GMQ_LOG_LEVEL
--hprof false Enable or disable hprof profiler GMQ_HPROF
--hprof-host Profiler host GMQ_HPROF_HOST
--hprof-port 8080 Profiler port GMQ_HPROF_PORT

Default config params

# Proto name to implement (amqp-rabbit or amqp-0-9-1)
proto: amqp-rabbit
# User list
  - username: guest
    password: 084e0343a0486ff05530df6c705c8bb4 # guest md5
# Server TCP settings
  port: 5672
  nodelay: false
  readBufSize: 196608
  writeBufSize: 196608
# Admin-server settings
  port: 15672
  shardSize: 8192
  maxMessagesInRam: 131072
# DB settings
  # default path 
  defaultPath: db
  # backend engine (badger or buntdb) 
  engine: badger
# Default virtual host path  
  defaultPath: /
# Security check rule (md5 or bcrypt)
  passwordCheck: md5
  channelsMax: 4096
  frameMaxSize: 65536

Performance tests

Performance tests with load testing tool on test-machine:

MacBook Pro (15-inch, 2016)
Processor 2,6 GHz Intel Core i7
Memory 16 GB 2133 MHz LPDDR3

Persistent messages

./bin/runjava com.rabbitmq.perf.PerfTest --exchange test -uri amqp://guest:[email protected]:5672 --queue test --consumers 10 --producers 5 --qos 100 -flag persistent
id: test-235131-686, sending rate avg: 53577 msg/s
id: test-235131-686, receiving rate avg: 51941 msg/s

Transient messages

./bin/runjava com.rabbitmq.perf.PerfTest --exchange test -uri amqp://guest:[email protected]:5672 --queue test --consumers 10 --producers 5 --qos 100
id: test-235231-085, sending rate avg: 71247 msg/s
id: test-235231-085, receiving rate avg: 69009 msg/s


Backend for durable entities

Database backend is changeable through config db.engine

  defaultPath: db
  engine: badger
  defaultPath: db
  engine: buntdb


basic.qos method implemented for standard AMQP and RabbitMQ mode. It means that by default qos applies for connection(global=true) or channel(global=false). RabbitMQ Qos means for channel(global=true) or each new consumer(global=false).

Admin server

The administration server is available at standard :15672 port and is read only mode at the moment. Main page above, and more screenshots at /readme folder



  • [ ] Optimize binds
  • [ ] Replication and clusterization
  • [ ] Own backend for durable entities and persistent messages
  • [ ] Migrate to message reference counting


Contribution of any kind is always welcome and appreciated. Contribution Guidelines in WIP

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
go (14,453
rabbitmq (243
messaging (207
queue (167
pubsub (93
amqp (70

Find Open Source By Browsing 7,000 Topics Across 59 Categories