All Projects → uw-labs → proximo

uw-labs / proximo

Licence: LGPL-3.0 license
Interoperable GRPC based publish/subscribe

Programming Languages

go
31211 projects - #10 most used programming language
Dockerfile
14818 projects
Makefile
30231 projects

Projects that are alternatives of or similar to proximo

Nats Operator
NATS Operator
Stars: ✭ 471 (+1139.47%)
Mutual labels:  pubsub, nats
Liftbridge
Lightweight, fault-tolerant message streams.
Stars: ✭ 2,175 (+5623.68%)
Mutual labels:  pubsub, nats
Hemera
🔬 Writing reliable & fault-tolerant microservices in Node.js https://hemerajs.github.io/hemera/
Stars: ✭ 773 (+1934.21%)
Mutual labels:  pubsub, nats
stan-js-replicator
replicate messages from streaming channel to jetstream
Stars: ✭ 14 (-63.16%)
Mutual labels:  nats, nats-streaming
Garagemq
AMQP message broker implemented with golang
Stars: ✭ 153 (+302.63%)
Mutual labels:  amqp, pubsub
liftbridge-api
Protobuf definitions for the Liftbridge gRPC API. https://github.com/liftbridge-io/liftbridge
Stars: ✭ 15 (-60.53%)
Mutual labels:  pubsub, nats
Arduino Nats
An Arduino / ESP8266 / Particle Photon compatible C++ library for communicating with a NATS (http://nats.io) server
Stars: ✭ 44 (+15.79%)
Mutual labels:  pubsub, nats
envoy-nats-streaming
No description or website provided.
Stars: ✭ 28 (-26.32%)
Mutual labels:  nats, nats-streaming
Msgflo
Distributed Flow-Based Programming via message queues
Stars: ✭ 136 (+257.89%)
Mutual labels:  amqp, pubsub
Benthos
Fancy stream processing made operationally mundane
Stars: ✭ 3,705 (+9650%)
Mutual labels:  amqp, nats
stan.rb
Ruby NATS Streaming Client
Stars: ✭ 21 (-44.74%)
Mutual labels:  nats, nats-streaming
gobroker
golang wrapper for all (to-be) kinds of message brokers
Stars: ✭ 15 (-60.53%)
Mutual labels:  amqp, pubsub
nats-connector-spark
A Spark Publish/Subscribe NATS Connector
Stars: ✭ 24 (-36.84%)
Mutual labels:  nats, nats-streaming
Nats.net
The official C# Client for NATS
Stars: ✭ 378 (+894.74%)
Mutual labels:  pubsub, nats
natsclient
NATS 2.x Client Library
Stars: ✭ 37 (-2.63%)
Mutual labels:  nats, nats-streaming
Nats.rb
Ruby client for NATS, the cloud native messaging system.
Stars: ✭ 850 (+2136.84%)
Mutual labels:  pubsub, nats
watermill-amqp
AMQP Pub/Sub for the Watermill project.
Stars: ✭ 27 (-28.95%)
Mutual labels:  amqp, pubsub
aop
AMQP on Pulsar protocol handler
Stars: ✭ 93 (+144.74%)
Mutual labels:  amqp, pubsub
moleculer-java
Java implementation of the Moleculer microservices framework
Stars: ✭ 39 (+2.63%)
Mutual labels:  amqp, nats
metamorphosis
Easy and flexible Kafka Library for Laravel and PHP 7
Stars: ✭ 39 (+2.63%)
Mutual labels:  pubsub

Proximo CircleCI

Proximo is a proxy for multiple different publish-subscribe queuing systems.

It is based on a GRPC interface definition, making it easy to create new client libraries. It already supports a number of popular queueing systems, and adding new ones is intended to be simple.

Goals

  • Expose multiple consumer (fan out) semantics where needed

  • Minimise overhead over direct use of a given queuing system

  • Allow configuration of the underlying queue system via runtime configuration of Proximo

  • Allow replacement of a queueing system with no change to the Proximo client applications

  • Enabling easy creation of client libraries for new languages (anything that has GRPC support)

Non goals

  • Exposing specific details of the underlying queue system via the client API

Server

This is the Proximo server implementation, written in Go

proximo server

Proximo client libraries

  • go - substrate - we recommend to use substrate to access proximo from go

API definition (protobuf)

protobuf definitions

Access Control

Access Control is supported using an optional config file, using the PROXIMO_ACL_CONFIG.

In this example, all clients can access the topics that start with products but only a client called product-writer has permission to to write to these topics.

default:
  roles: ["read-products"]
roles:
- id: "read-products"
  consume: ["products.*"]
- id: "write-products"
  publish: ["products.*"]
clients:
- id: "product-writer"
  secret: "$2y$10$2AzC3Z8L18cP.crFi.ZDsuFdbwrYu16Lnh8y7U1wMO3QPanYuwJIm" # pass is bcrypted hash of "password"
  roles: ["write-products"]

Add the token to the context, example:

sink, _ := proximo.NewAsyncMessageSink(proximo.AsyncMessageSinkConfig{
  Broker:   "localhost:6868",
  Topic:    "products",
  Insecure: true,
})

token := base64.StdEncoding.EncodeToString(fmt.Sprintf("%s:%s", "product-writer", "password"))
md := metadata.Pairs("Authorization", fmt.Sprintf("Bearer %s", token))
reqCtx := metadata.NewOutgoingContext(ctx, md)

sink.PublishMessage(reqCtx, &Message{Data: []byte("hello world")})
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].