- Notifications
You must be signed in to change notification settings - Fork40
AMQP message broker implemented with golang
License
valinurovam/garagemq
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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)
- Have fun and learn a lot
- 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 |
---|---|---|---|---|---|
46.101.117.78 | 5672 | 15672 | guest | guest | / |
- AdminServer - http://46.101.117.78:15672/
- Connect uri -
amqp://guest:guest@46.101.117.78:5672
The quick way to start with GarageMQ is by usingdocker
. You can build it by your own or pull from docker-hub
docker pull amplitudo/garagemqdocker run --name garagemq -p 5672:5672 -p 15672:15672 amplitudo/garagemq
or
go get -u github.com/valinurovam/garagemq/...cd$GOPATH/src/github.com/valinurovam/garagemqdocker build -t garagemq.docker run --name garagemq -p 5672:5672 -p 15672:15672 garagemq
You can also usego get:go get -u github.com/valinurovam/garagemq/...
go get -u github.com/valinurovam/garagemq/...cd$GOPATH/src/github.com/valinurovam/garagemqmake build.all&& make run
Flag | Default | Description | ENV |
---|---|---|---|
--config | default config | Config path | GMQ_CONFIG |
--log-file | stdout | Log file path orstdout ,stderr | GMQ_LOG_FILE |
--log-level | info | Logger level | GMQ_LOG_LEVEL |
--hprof | false | Enable or disablehprof profiler | GMQ_HPROF |
--hprof-host | 0.0.0.0 | Profiler host | GMQ_HPROF_HOST |
--hprof-port | 8080 | Profiler port | GMQ_HPROF_PORT |
# Proto name to implement (amqp-rabbit or amqp-0-9-1)proto:amqp-rabbit# User listusers: -username:guestpassword:084e0343a0486ff05530df6c705c8bb4# guest md5# Server TCP settingstcp:ip:0.0.0.0port:5672nodelay:falsereadBufSize:196608writeBufSize:196608# Admin-server settingsadmin:ip:0.0.0.0port:15672queue:shardSize:8192maxMessagesInRam:131072# DB settingsdb:# default pathdefaultPath:db# backend engine (badger or buntdb)engine:badger# Default virtual host pathvhost:defaultPath:/# Security check rule (md5 or bcrypt)security:passwordCheck:md5connection:channelsMax:4096frameMaxSize:65536
Performance tests with load testing toolhttps://github.com/rabbitmq/rabbitmq-perf-test on test-machine:
MacBook Pro (15-inch, 2016)Processor 2,6 GHz Intel Core i7Memory 16 GB 2133 MHz LPDDR3
./bin/runjava com.rabbitmq.perf.PerfTest --exchangetest -uri amqp://guest:guest@localhost:5672 --queuetest --consumers 10 --producers 5 --qos 100 -flag persistent......id: test-235131-686, sending rate avg: 53577 msg/sid: test-235131-686, receiving rate avg: 51941 msg/s
./bin/runjava com.rabbitmq.perf.PerfTest --exchangetest -uri amqp://guest:guest@localhost:5672 --queuetest --consumers 10 --producers 5 --qos 100......id: test-235231-085, sending rate avg: 71247 msg/sid: test-235231-085, receiving rate avg: 69009 msg/s
Database backend is changeable through configdb.engine
db: defaultPath: db engine: badger
db: 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).
The administration server is available at standard:15672
port and isread only mode
at the moment. Main page above, andmore 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