All Projects → valinurovam → Garagemq

valinurovam / Garagemq

Licence: mit
AMQP message broker implemented with golang

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Garagemq

gobroker
golang wrapper for all (to-be) kinds of message brokers
Stars: ✭ 15 (-90.2%)
Mutual labels:  queue, amqp, messaging, pubsub
Servicebus
Simple service bus for sending events between processes using amqp.
Stars: ✭ 415 (+171.24%)
Mutual labels:  rabbitmq, messaging, amqp
Php Amqplib
The most widely used PHP client for RabbitMQ
Stars: ✭ 3,950 (+2481.7%)
Mutual labels:  rabbitmq, messaging, amqp
Remit
RabbitMQ-backed microservices supporting RPC, pubsub, automatic service discovery and scaling with no code changes.
Stars: ✭ 24 (-84.31%)
Mutual labels:  rabbitmq, messaging, amqp
aop
AMQP on Pulsar protocol handler
Stars: ✭ 93 (-39.22%)
Mutual labels:  amqp, messaging, pubsub
azure-service-bus-go
Golang library for Azure Service Bus -- https://aka.ms/azsb
Stars: ✭ 67 (-56.21%)
Mutual labels:  queue, amqp, messaging
Node Celery
Celery client for Node.js
Stars: ✭ 648 (+323.53%)
Mutual labels:  rabbitmq, queue, amqp
Machinery
Machinery is an asynchronous task queue/job queue based on distributed message passing.
Stars: ✭ 5,821 (+3704.58%)
Mutual labels:  rabbitmq, queue, amqp
Yii Queue
Queue extension for Yii 3.0
Stars: ✭ 38 (-75.16%)
Mutual labels:  rabbitmq, queue, amqp
Rabbitmqbundle
RabbitMQ Bundle for the Symfony2 web framework
Stars: ✭ 1,125 (+635.29%)
Mutual labels:  rabbitmq, messaging, amqp
Rabbitmq Server
Open source RabbitMQ: core server and tier 1 (built-in) plugins
Stars: ✭ 9,064 (+5824.18%)
Mutual labels:  rabbitmq, messaging, amqp
Laravel Queue
Laravel Enqueue message queue extension. Supports AMQP, Amazon SQS, Kafka, Google PubSub, Redis, STOMP, Gearman, Beanstalk and others
Stars: ✭ 155 (+1.31%)
Mutual labels:  messaging, queue, amqp
Laravel Queue Rabbitmq
RabbitMQ driver for Laravel Queue. Supports Laravel Horizon.
Stars: ✭ 1,175 (+667.97%)
Mutual labels:  rabbitmq, queue, amqp
watermill-amqp
AMQP Pub/Sub for the Watermill project.
Stars: ✭ 27 (-82.35%)
Mutual labels:  rabbitmq, amqp, pubsub
Yii2 Queue
Yii2 Queue Extension. Supports DB, Redis, RabbitMQ, Beanstalk and Gearman
Stars: ✭ 977 (+538.56%)
Mutual labels:  rabbitmq, queue, amqp
Humusamqp
PHP 7 AMQP library
Stars: ✭ 70 (-54.25%)
Mutual labels:  rabbitmq, messaging, amqp
Bunny
Bunny is a popular, easy to use, mature Ruby client for RabbitMQ
Stars: ✭ 1,224 (+700%)
Mutual labels:  rabbitmq, messaging, amqp
Gen rmq
Elixir AMQP consumer and publisher behaviours
Stars: ✭ 146 (-4.58%)
Mutual labels:  rabbitmq, amqp
Rabbitmq Amqp1.0
AMQP 1.0 support for RabbitMQ
Stars: ✭ 88 (-42.48%)
Mutual labels:  rabbitmq, messaging
Lightbus
RPC & event framework for Python 3
Stars: ✭ 149 (-2.61%)
Mutual labels:  messaging, queue

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.

Demo

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 /

Installation and Building

Docker

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

or

go get -u github.com/valinurovam/garagemq/...
cd $GOPATH/src/github.com/valinurovam/garagemq
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 github.com/valinurovam/garagemq/...

go get -u github.com/valinurovam/garagemq/...
cd $GOPATH/src/github.com/valinurovam/garagemq
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 0.0.0.0 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
users:
  - username: guest
    password: 084e0343a0486ff05530df6c705c8bb4 # guest md5
# Server TCP settings
tcp:
  ip: 0.0.0.0
  port: 5672
  nodelay: false
  readBufSize: 196608
  writeBufSize: 196608
# Admin-server settings
admin:
  ip: 0.0.0.0
  port: 15672
queue:
  shardSize: 8192
  maxMessagesInRam: 131072
# DB settings
db:
  # default path 
  defaultPath: db
  # backend engine (badger or buntdb) 
  engine: badger
# Default virtual host path  
vhost:
  defaultPath: /
# Security check rule (md5 or bcrypt)
security:
  passwordCheck: md5
connection:
  channelsMax: 4096
  frameMaxSize: 65536

Performance tests

Performance tests with load testing tool https://github.com/rabbitmq/rabbitmq-perf-test 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

Internals

Backend for durable entities

Database backend is changeable through config db.engine

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

QOS

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

Overview

TODO

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

Contribution

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].