Build event-driven and event streaming applications with ease

Overview

Commander 🚀

GoDoc Coverage Coverage Report Test

Commander is Go library for writing event-driven applications. Enabling event sourcing, RPC over messages, SAGA's, bidirectional streaming and more! Dialects could be used to stream messages from one to another.

Getting started

  1. 🚀 Examples
  2. 📚 Documentation

Contributing

Thank you for your interest in contributing to Commander! Check out the open projects and/or issues and feel free to join any ongoing discussion.

Everyone is welcome to contribute, whether it's in the form of code, documentation, bug reports, feature requests, or anything else. We encourage you to experiment with the project and make contributions to help evolve it to meet your needs!

See the contributing guide for more details.

Issues
  • V0.7.0

    V0.7.0

    This version introduces various improvements and the io dialect.

    IO

    A in-memory dialect capable of reading and writing byte messages to a given io.Reader/io.Writer. The dialect could be used in any library accepting these interfaces. The messages are encoded and written as a UTF-8 string.

    opened by jeroenrinzema 4
  • data race

    data race

    Describe the bug data race between close ready channel, create and select https://github.com/jeroenrinzema/commander/blob/master/dialects/kafka/consumer/group.go#L67 we can receive new ready channel here (not closed) https://github.com/jeroenrinzema/commander/blob/master/dialects/kafka/consumer/group.go#L56

    To Reproduce Steps to reproduce the behavior. Please include code examples:

    1. Setup '...'
    2. Emit event '....'
    3. Await x seconds '....'
    4. See error

    Expected behavior A clear and concise description of what you expected to happen.

    Desktop (please complete the following information):

    • OS: [e.g. Linux]
    • Golang version

    Additional context Add any other context about the problem here.

    bug 
    opened by NOMORECOFFEE 1
  • infinit lock

    infinit lock

    Describe the bug forget to call wg.Done() and if we call Close() then we are lock on wg.Wait() https://github.com/jeroenrinzema/commander/blob/master/dialects/kafka/consumer/group.go#L94 https://github.com/jeroenrinzema/commander/blob/master/dialects/kafka/consumer/group.go#L89

    To Reproduce Steps to reproduce the behavior. Please include code examples:

    1. Setup '...'
    2. Emit event '....'
    3. Await x seconds '....'
    4. See error

    Expected behavior A clear and concise description of what you expected to happen.

    Desktop (please complete the following information):

    • OS: [e.g. Linux]
    • Golang version

    Additional context Add any other context about the problem here.

    bug 
    opened by NOMORECOFFEE 1
  • Streaming between dialects

    Streaming between dialects

    Businesses have a lot of times multiple pieces of infrastructure which requires integrations to be made. Streaming between dialects could allow two totally different dialects to stream from one another (ex: Redis - Kafka, Kafka - RabbitMQ).

    This requires the consume, handle and writer interfaces to be modified. The API should feel natural and not in the way. An idea is to move the consuming and writing from the groups to the dialect.

    dialect.Handle(commander.EventTopic, "action", func())
    

    and the writer to include the dialect.

    writer.ProduceEvent(dialect, "action", 1, uuid.UUID, nil)
    
    enhancement help wanted 
    opened by jeroenrinzema 1
  • Feedback v2

    Feedback v2

    Hello,

    First of all, sorry if it does not build - I did not bother setting up the deps required, this is just intended to show how I'd handle the switch(or get rid of it altogether). DIsmiss if you feel like it :) Ignore the other PR, i managed to destroy history. Force pushes for the win.

    opened by vkuznecovas 1
  • bufio scanner race condition

    bufio scanner race condition

    A race condition is triggered while scanning the io.Reader for the next byte buffer.

    This due to the shared byte buffer returned on read. The next byte buffer is read before the current byte buffer is processed.

    opened by jeroenrinzema 0
  • V0.6.0

    V0.6.0

    • [x] Migration to Github actions
    • [x] Improve message interfaces
    • [x] Improve middleware usage and interfaces
    • [x] Refactor dialect interface to avoid the usage of Assigned
    • [x] Improve mock dialect pub/sub channels
    opened by jeroenrinzema 0
  • Mocking dialect is unstable

    Mocking dialect is unstable

    The mocking dialect is at the moment very unstable and needs major rethinking. Currently issues such as race detections and deadlocks are common.

    This issue has a high priority and should be fixed.

    bug 
    opened by jeroenrinzema 0
  • CLI Design

    CLI Design

    I want to start developing a CLI interface that could be used for debugging/testing purposes.

    Feel free to join the discussion or opt in if you have any ideas.

    opened by jeroenrinzema 0
  • Development of dialects

    Development of dialects

    Commander allows different dialects to be developed. Currently the project has dialects for mocking and Kafka. Supporting more dialects could increase the versatility of the project. I am looking for contributes wanting to develop more dialects. Examples are:

    • RabbitMQ
    • Redis
    • GRPC
    • HTTP(2)

    some protocols (ex: GRPC, HTTP(2)) are not streaming/event driven protocols but could be used to create connectors between dialects (#11).

    enhancement help wanted 
    opened by jeroenrinzema 2
Releases(v0.6.1)
Owner
Jeroen Rinzema
I move bits. Software developer, interested in distributed systems and event-driven architectures
Jeroen Rinzema
Simple, high-performance event streaming broker

Styx Styx is a simple and high-performance event streaming broker. It aims to provide teams of all sizes with a simple to operate, disk-persisted publ

Dataptive 46 Apr 6, 2022
Basic Event Streaming - Fundamentals of Kafka Studies (BESt-FunKS)

Apache Kafka My study repo for Apache Kafka. Based on this tutorial. Contents Overview Key Terms Event Topic Producer Consumer Partition Getting Start

João Saraceni 2 Mar 2, 2022
pubsub controller using kafka and base on sarama. Easy controll flow for actions streamming, event driven.

Psub helper for create system using kafka to streaming and events driven base. Install go get github.com/teng231/psub have 3 env variables for config

Te Nguyen 5 May 29, 2022
Streamhub: a toolkit crafted for streaming-powered applications written in Go

✉️ Streamhub Streamhub is a toolkit crafted for streaming-powered applications w

Neutrino Corporation 3 Jun 4, 2022
POC of an event-driven Go implementation

Event Driven example in Golang This POC shows an example of event-driven architecture with a working domain event broker, an event producer and a cons

Fede Barcelona 0 Nov 2, 2021
Example Golang Event-Driven with kafka Microservices Choreography

Microservices Choreography A demonstration for event sourcing using Go and Kafka example Microservices Choreography. To run this project: Install Go I

Muhammad Nasrul 0 Dec 2, 2021
Govent is an event bus framework for DDD event source implement

Govent is an event bus framework for DDD event source implement. Govent can also solve the package circular dependency problem.

Michaelyn 2 Jan 28, 2022
Event-planning-go - GRAPHQL Project for Event Planning

About The Project GRAPHQL Project for Event Planning Building the project with l

Muhamad Hilmi Hibatullah 2 Mar 13, 2022
:incoming_envelope: A fast Message/Event Hub using publish/subscribe pattern with support for topics like* rabbitMQ exchanges for Go applications

Hub ?? A fast enough Event Hub for go applications using publish/subscribe with support patterns on topics like rabbitMQ exchanges. Table of Contents

Leandro Lugaresi 115 Apr 8, 2022
Declarative streaming ETL for mundane tasks, written in Go

Benthos is a high performance and resilient stream processor, able to connect various sources and sinks in a range of brokering patterns and perform h

Ashley Jeffs 4.5k Jun 27, 2022
nanoQ — high-performance brokerless Pub/Sub for streaming real-time data

nanoQ — high-performance brokerless Pub/Sub for streaming real-time data nanoQ is a very minimalistic (opinionated/limited) Pub/Sub transport library.

Aigent 148 Jun 7, 2022
replicate messages from streaming channel to jetstream

NATS Streaming/Jetstream Replicator [SJR] Introduction This project replicates messages from streaming channels to jetstream. but why? At Snapp when w

Snapp Cab Incubators 15 Mar 25, 2022
Service responsible for streaming Kafka messages.

kafka-stream ????‍♂️ Service responsible for streaming Kafka messages. What it does? This service reads all messages from the input topic and sends th

Luan Felipe Sapelli 1 Oct 16, 2021
Мост между NATS streaming и MQ Series

Мост между NATS streaming и MQ Series Оригинальный репозиторий https://github.com/nats-io/nats-mq NATS-MQ Bridge This project implements a simple, but

Temur Yunusov 0 Nov 26, 2021
A basic event queue (and publisher/subscriber) in go

queue A basic event queue (and publisher/subscriber) in go. Installation go get github.com/jimjibone/queue Queue Usage Queue is a channel-based FIFO q

James Reuss 0 Dec 17, 2021
⚡️ A lightweight service that will build and store your go projects binaries, Integrated with Github, Gitlab, Bitbucket and Bitbucket Server.

Rabbit A lightweight service that will build and store your go projects binaries. Rabbit is a lightweight service that will build and store your go pr

Ahmed 195 Mar 10, 2022
Easy to use distributed event bus similar to Kafka

chukcha Easy to use distributed event bus similar to Kafka. The event bus is designed to be used as a persistent intermediate storage buffer for any k

Yuriy Nasretdinov 71 Jun 8, 2022
Discrete-event simulation in Go using goroutines

SimGo SimGo is a discrete event simulation framework for Go. It is similar to SimPy and aims to be easy to set up and use. Processes are defined as si

Felix Schütz 22 Jun 26, 2022
Simple synchronous event pub-sub package for Golang

event-go Simple synchronous event pub-sub package for Golang This is a Go language package for publishing/subscribing domain events. This is useful to

itchyny 19 Jun 16, 2022