/walrus

:clock2: Real-time event streaming platform built on top of gRPC streams

Primary LanguageGoApache License 2.0Apache-2.0

Walrus

🕑 Real-time event streaming platform built on top of gRPC streams

Table of Contents
  1. About the project
  2. Getting Started
  3. Usage
  4. Contributing
  5. License

About the Project

Built With

How it works

Walrus uses pub/sub pattern to allow applications to subscribe to specific topics. A topic is any event or a concern that can happen on your systems, it can be a new account that was just created, or a credit card purchase. So any application that wants to be notified by new events, it will just need to subscribe to this topic. To make it possible, Walrus offers an rpc method called Subscribe which any service can call to establish a gRPC connection and start to listen for a server side message stream. Then, when a new event happen, any application can call the Publish rpc method to publish this event through Walrus that will send it to all subscriptions based on the event's topic.

walrus pub/sub architecture explained

Getting Started

All you should know to run Walrus locally.

Prerequisites

How to run

Locally

  1. Clone the repo
    git clone https://github.com/matheusmosca/walrus.git
  2. Run the server
    make run-server
  3. Create generated files
    make generate

Docker

  1. Build image
    docker build --tag walrus .
  2. Run the server in a container exposing the default port
    docker run -d --name walrus-test --publish 3000:3000 walrus
  3. See the logs live
    docker logs --follow walrus-test
  4. To stop the container run
    docker stop walrus-test

You can test the server running the examples, first the subscriber, then the publisher.

Testing

make test

Usage

TODO

Contributing

Take a look at the open issues and let a comment on them if you want to help somehow. Feel free to share your ideas or report bugs by opening a new issue as well. Any contributions you make are really appreciated and I would love to review your pull requests. ❤️

License

Distributed under the APACHE-2.0 License. See LICENSE for more information.