resgate alternatives and similar packages
Based on the "Distributed Systems" category.
Alternatively, view resgate alternatives based on common mentions on social networks and blogs.
-
Nomad
Nomad is an easy-to-use, flexible, and performant workload orchestrator that can deploy a mix of microservice, batch, containerized, and non-containerized applications. Nomad is easy to operate and scale and has native Consul and Vault integrations. -
go-zero
go-zero is a web and rpc framework written in Go. It's born to ensure the stability of the busy sites with resilient design. Builtin goctl greatly improves the development productivity. [Moved to: https://github.com/zeromicro/go-zero] -
rpcx
Best microservices framework in Go, like alibaba Dubbo, but with more features, Scale easily. Try it. Test it. If you feel it's better, use it! ๐๐๐ฏ๐ๆ๐๐ฎ๐๐๐จ, ๐๐จ๐ฅ๐๐ง๐ ๆ๐ซ๐ฉ๐๐ฑ! build for cloud! -
ringpop-go
Scalable, fault-tolerant application-layer sharding for Go applications -
Kitex
Go RPC framework with high-performance and strong-extensibility for building micro-services. -
KrakenD
Ultra performant API Gateway with middlewares. A project hosted at The Linux Foundation -
dragonboat
A feature complete and high performance multi-group Raft library in Go. -
Dkron
Dkron - Distributed, fault tolerant job scheduling system https://dkron.io -
Encore
Encore is the Backend Development Platform purpose-built to help you create event-driven and distributed systems. -
emitter-io
High performance, distributed and low latency publish-subscribe platform. -
gleam
Fast, efficient, and scalable distributed map/reduce system, DAG execution, in memory or on disk, written in pure Go, runs standalone or distributedly. -
glow
Glow is an easy-to-use distributed computation system written in Go, similar to Hadoop Map Reduce, Spark, Flink, Storm, etc. I am also working on another similar pure Go system, https://github.com/chrislusf/gleam , which is more flexible and more performant. -
Olric
Distributed in-memory object store. It can be used as an embedded Go library and a language-independent service. -
Dragonfly
Dragonfly is an open source P2P-based file distribution and image acceleration system. It is hosted by the Cloud Native Computing Foundation (CNCF) as an Incubating Level Project. -
go-doudou
go-doudou๏ผdoudou pronounce /dษudษu/๏ผis OpenAPI 3.0 (for REST) spec and Protobuf v3 (for grpc) based lightweight microservice framework. It supports monolith service application as well. -
go-health
Library for enabling asynchronous health checks in your service -
arpc
More effective network communication, two-way calling, notify and broadcast supported. -
go-sundheit
A library built to provide support for defining service health for golang services. It allows you to register async health checks for your dependencies and the service itself, provides a health endpoint that exposes their status, and health metrics. -
sleuth
A Go library for master-less peer-to-peer autodiscovery and RPC between HTTP services -
Maestro
Take control of your data, connect with anything, and expose it anywhere through protocols such as HTTP, GraphQL, and gRPC. -
celeriac
Golang client library for adding support for interacting and monitoring Celery workers, tasks and events. -
drmaa
Compute cluster (HPC) job submission library for Go (#golang) based on the open DRMAA standard. -
flowgraph
Flowgraph package for scalable asynchronous system development
InfluxDB - Power Real-Time Data Analytics at Scale
Do you think we are missing an alternative of resgate or a related project?
Popular Comparisons
README
Realtime API GatewaySynchronize Your Clients
Visit Resgate.io for guides, live demos, and resources.
Resgate is a Go project implementing a realtime API gateway for the [RES protocol](docs/res-protocol.md) with NATS server as messaging system.
It is a simple server that lets you create REST, real time, and RPC APIs, where all your clients are synchronized seamlessly.
Used for building new REST APIs with real-time functionality, or when creating single page applications using reactive frameworks such as React, Vue.js, or Modapp.
[Book Collection Animation](docs/img/book-collection-anim.gif)
Screen capture from the [Book Collection Example](examples/book-collection/). Try out the Live demo version yourself.
How it works
Resgate handles all API requests from your clients, instead of directly exposing your micro-services (represented by Node.js and Java below). Clients will connect to Resgate, using either HTTP or WebSocket, to make requests. These requests are sent to the micro-services over NATS server, and Resgate will keep track on which resource each client has requested.
Whenever there is a change to the data, the responsible micro-service sends an event. Resgate will use this event to both update its own cache, and make sure each subscribing client is kept up-to-date.
Quickstart
If you install Docker, it is easy to run both NATS server and Resgate as containers:
docker network create res
docker run -d --name nats -p 4222:4222 --net res nats
docker run --name resgate -p 8080:8080 --net res resgateio/resgate --nats nats://nats:4222
Both images are small, about 10 MB each.
See Resgate.io - Installation for other ways of installation.
Examples
While Resgate may be used with any language, the examples in this repository are written in Javascript for Node.js, without using any additional library.
- For Go (golang) examples, see go-res package
- For C# (NETCore) examples, see RES Service for .NET
Example | Description |
---|---|
[Hello World](examples/hello-world/) | Simple service serving a static message. |
[Edit Text](examples/edit-text/) | Text field that can be edited by multiple clients concurrently. |
[Book Collection](examples/book-collection/) | List of book titles & authors that can be edited by many. |
[JWT Authentication](examples/jwt-authentication/) | Showing how JWT tokens can be used for authentication. |
[Password Authentication](examples/password-authentication/) | Showing authentication with user and password credentials. |
[Client Session](examples/client-session/) | Creating client sessions that survive reloads and reconnects. |
Note
All examples are complete with both service and client.
Protocol Specification
For more in depth information on the protocol:
- [RES protocol](docs/res-protocol.md) - Introduction and general terminology
- [RES-Service protocol](docs/res-service-protocol.md) - How to write services
- [RES-Client protocol](docs/res-client-protocol.md) - How to write client libraries, if ResClient doesn't fit your needs
Usage
resgate [options]
Server options
Option | Description | Default value |
---|---|---|
-n, --nats <url> | NATS Server URL | nats://127.0.0.1:4222 |
-i, --addr <host> | Bind to HOST address | 0.0.0.0 |
-p, --port <port> | HTTP port for client connections | 8080 |
-w, --wspath <path> | WebSocket path for clients | / |
-a, --apipath <path> | Web resource path for clients | /api/ |
-r, --reqtimeout <seconds> | Timeout duration for NATS requests | 3000 |
-u, --headauth <method> | Resource method for header authentication | |
--apiencoding <type> | Encoding for web resources: json, jsonflat | json |
--putmethod <methodName> | Call method name mapped to HTTP PUT requests | |
--deletemethod <methodName> | Call method name mapped to HTTP DELETE requests | |
--patchmethod <methodName> | Call method name mapped to HTTP PATCH requests | |
--wscompression | Enable WebSocket per message compression | |
--resetthrottle <limit> | Limit on parallel requests sent on a system reset | 0 (no limit) |
--referencethrottle <limit> | Limit on parallel requests sent following references | 0 (no limit) |
-c, --config <file> | Configuration file in JSON format |
Security options
Option | Description | Default value |
---|---|---|
--tls | Enable TLS for HTTP | false |
--tlscert <file> | HTTP server certificate file | |
--tlskey <file> | Private key for HTTP server certificate | |
--creds <file> | NATS User Credentials file | |
--natscert <file> | NATS Client certificate file | |
--natskey <file> | NATS Client certificate key file | |
--natsrootca <file> | NATS Root CA file(s) | |
--alloworigin <origin> | Allowed origin(s): *, or <scheme>://<hostname>[:<port>] | * |
Logging options
Option | Description |
---|---|
-D, --debug | Enable debugging output |
-V, --trace | Enable trace logging |
-DV | Debug and trace |
Common options
Option | Description |
---|---|
-h, --help | Show usage message |
-v, --version | Show version |
Configuration
Configuration is a JSON encoded file. If no config file is found at the given path, a new file will be created with default values as follows.
Properties
{
// URL to the NATS server.
"natsUrl": "nats://127.0.0.1:4222",
// Bind to HOST IPv4 or IPv6 address.
// Empty string ("") means all IPv4 and IPv6 addresses.
// Invalid or missing IP address defaults to 0.0.0.0.
"addr": "0.0.0.0",
// Port for the http server to listen on.
// If the port value is missing or 0, standard http(s) port is used.
"port": 8080,
// Path for accessing the RES API WebSocket.
"wsPath": "/",
// Path prefix for accessing web resources.
"apiPath": "/api",
// Timeout in milliseconds for NATS requests.
"requestTimeout": 3000,
// Size of message buffer for incoming NATS requests.
"bufferSize": 8192,
// Header authentication resource method for web resources.
// Prior to accessing the resource, this resource method will be
// called, allowing an auth service to set a token using
// information such as the request headers.
// Missing value or null will disable header authentication.
// Eg. "authService.headerLogin"
"headerAuth": null,
// Encoding for web resources.
// Available encodings are:
// * json - JSON encoding with resource reference meta data.
// * jsonflat - JSON encoding without resource reference meta data.
"apiEncoding": "json",
// Call method name to map HTTP PUT method requests to.
// Eg. "put"
"putMethod": null,
// Call method name to map HTTP DELETE method requests to.
// Eg. "delete"
"deleteMethod": null,
// Call method name to map HTTP PATCH method requests to.
// Eg. "patch"
"patchMethod": null,
// Flag enabling WebSocket per message compression (RFC 7692).
"wsCompression": false,
// Throttle on how many requests are sent in response to a system reset.
// Once that the number of requests are sent, the server will await
// responses before sending more requests. Zero (0) means no throttling.
// Eg. 32
"resetThrottle": 0,
// Throttle on how many requests are sent when recursively following
// resource references for a subscription.
// Once that the number of requests are sent, the server will await
// responses before sending more requests. Zero (0) means no throttling.
// Eg. 32
"referenceThrottle": 0,
// Flag enabling tls encryption.
"tls": false,
// Certificate file path for tls encryption.
"tlsCert": "",
// Key file path for tls encryption.
"tlsKey": "",
// NATS User Credentials file.
// Eg. "ngs.creds"
"natsCreds": "",
// NATS Client certificate file.
// Eg. "client-cert.pem"
"natsCert": "",
// NATS Client certificate key file.
// Eg. "client-key.pem"
"natsKey": "",
// NATS Root CA files.
// Eg. ["rootCA.pem"]
"natsRootCAs": [],
// Allowed origin for CORS requests, or * to allow all origins.
// Multiple origins are separated by semicolon.
// Eg. "https://example.com;https://api.example.com"
"allowOrigin": "*",
// Flag enabling debug logging.
"debug": false,
// Flag enabling trace logging.
"trace": false
}
Running Resgate
By design, Resgate will exit if it fails to connect to the NATS server, or if it loses the connection. This is to allow clients to try to reconnect to another Resgate instance and resume from there, and to give Resgate a fresh new start if something went wrong.
A simple bash script can keep it running:
#!/bin/bash
until ./resgate; do
echo "Resgate exited with code $?. Restarting.." >&2
sleep 2
done
Documentation
Visit Resgate.io for documentation and resources.
It has guides on installation, configuration, writing services, scaling, queries, and other useful things. It also contains guides for ResClient when working with frameworks such as React, Vue.js, and Modapp.
Support Resgate
Resgate is an MIT-licensed open source project where development is made possible through community support.
If you'd like help out, please consider:
Contribution
Any feedback on the protocol and its implementation is highly appreciated!
If you find any issues with the protocol or the gateway, feel free to report them.
If you have created a service library, a client library, or some other tool or utility, please contact me to have it added to the list of resources.
*Note that all licence references and agreements mentioned in the resgate README section above
are relevant to that project's source code only.