Build event-driven and event streaming applications with ease

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.

Owner
Jeroen Rinzema
I move bits. Software developer, interested in distributed systems and event-driven architectures
Jeroen Rinzema
Comments
  • 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.

  • 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.

  • 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.

  • 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)
    
  • 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.

  • 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.

  • 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
  • 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.

  • 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.

  • 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).

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

Nov 24, 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

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

Sep 26, 2022
Streamhub: a toolkit crafted for streaming-powered applications written in Go

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

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

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

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.

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

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

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

Dec 17, 2022
Declarative streaming ETL for mundane tasks, written in Go
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

Dec 28, 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.

Nov 9, 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

Dec 15, 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

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

Nov 26, 2021
May 11, 2023
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

Dec 17, 2021
⚡️ A lightweight service that will build and store your go projects binaries, Integrated with Github, Gitlab, Bitbucket and Bitbucket Server.
⚡️ 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

Nov 19, 2022
Inspr is an application mesh for simple, fast and secure development of distributed applications.
Inspr is an application mesh for simple, fast and secure development of distributed applications.

Inspr is an engine for running distributed applications, using multiple communication patterns such as pub sub and more, focused on type consistency a

Jun 10, 2022
Easy to use distributed event bus similar to Kafka
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

Dec 30, 2022