You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
15
15
- Added possibility to set response code for `response_from` messages in reverse proxy (`kafka` and `http_async`). [#321](https://github.com/Accenture/reactive-interaction-gateway/pull/321)
16
16
- Added new version - `v3` - for internal endpoints to support response code in the `/responses` endpoint
17
17
- Added Helm v3 template to the `deployment` folder [#288](https://github.com/Accenture/reactive-interaction-gateway/issues/288)
18
+
- Added detailed features summary on the website with architecture diagrams. [#284](https://github.com/Accenture/reactive-interaction-gateway/issues/284)
18
19
- Added [documentation section](https://accenture.github.io/reactive-interaction-gateway/docs/jwt-blacklisting.html) for the JWT Blacklist feature. [#156](https://github.com/Accenture/reactive-interaction-gateway/issues/156)
19
20
20
21
### Changed
@@ -32,6 +33,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
32
33
```
33
34
34
35
More information, follow the [deployment Readme](./deployment/README.md). [#319](https://github.com/Accenture/reactive-interaction-gateway/issues/319)
36
+
- make README smaller, easier to read and highlight features. [#284](https://github.com/Accenture/reactive-interaction-gateway/issues/284)
Take a look at the [documentation](https://accenture.github.io/reactive-interaction-gateway/docs/intro.html) and get in touch with us on [Slack](https://rig-slackin.herokuapp.com)!
12
-
13
-
-[About](#about)
14
-
-[Getting Started](#getting-started)
15
-
-[API Documentation](#api-documentation)
16
-
-[Metrics](#metrics)
17
-
-[Contribute](#contribute)
18
-
-[License](#license)
19
-
-[Acknowledgments](#acknowledgments)
20
9
21
10
## About
22
11
23
-
How RIG makes asynchronous backend<->frontend communication easier:
24
-
25
-
- RIG takes care of client connection state so you don't have to.
26
-
- RIG picks up back-end events and forwards them to clients based on subscriptions.
27
-
- RIG forwards client requests to backend services either synchronously or asynchronously.
28
-
29
-
Built on open standards, RIG is very easy to integrate – and easy to _replace_ – which means low-cost, low-risk adoption. Unlike other solutions, RIG does not leak into your application – no libraries or SDKs required.
30
-
31
-
Features:
32
-
33
-
- Easy to use and scalable by design:
34
-
- Supports tens of thousands stable connections per node even on low-end machines.
35
-
- Easy to add additional nodes.
36
-
- Built on the battle-proven [Erlang/OTP](http://www.erlang.org/) distribution model.
37
-
- Only uses in-memory data structures - no external dependencies to configure or scale.
38
-
- Connect using standard protocols:
39
-
- Firewall friendly and future proof using Server-Sent Events (SSE)
- Regular HTTP requests, so no issues with proxy servers or firewalls.
42
-
- Connection multiplexing with HTTP/2 out of the box.
43
-
- SSE implementation (browser) keeps track of connection drops and restores the connection automatically.
44
-
- Polyfills available for older browsers.
45
-
- WebSocket connections are supported, too.
46
-
- HTTP long polling for situations where SSE and WS are not supported.
47
-
- Publish events from various sources:
48
-
- Kafka
49
-
- NATS
50
-
- Amazon Kinesis
51
-
- or publish via HTTP
52
-
- Convert a HTTP request to a message for asynchronous processing:
53
-
- produce to Kafka topic, optionally wait for the result on another Kafka topic
54
-
- produce to a NATS topic, optionally using NATS request-response to wait for the result
55
-
- produce to Amazon Kinesis
56
-
- Uses the CNCF [CloudEvents specification](https://cloudevents.io/).
57
-
- Flexible event subscription model based on event types.
58
-
- Use existing services for authentication and authorization of users and subscriptions.
59
-
- JWT signature verification for APIs as a simple authentication check.
60
-
- Session blacklist with immediate session invalidation.
61
-
62
-
For more details take a look at the [documentation](https://accenture.github.io/reactive-interaction-gateway/docs/intro.html).
63
-
64
-
## Getting Started
12
+
The Reactive Interaction Gateway (RIG) is the glue between your client (frontend) and your backend. It makes communication between them easier by (click the links to learn more)
65
13
66
-
Take a look at the [getting-started tutorial](https://accenture.github.io/reactive-interaction-gateway/docs/tutorial.html).
14
+
- picking up backend events and forwarding them to clients based on subscriptions: this makes your frontend apps **reactive and eliminates the need for polling**. You can do this
15
+
-[asynchronously](https://accenture.github.io/reactive-interaction-gateway/docs/features.html#picking-up-backend-events-and-forwarding-them-to-clients-based-on-subscriptions#asynchronously) - using Kafka, Nats or Kinesis.
16
+
-[synchronously](https://accenture.github.io/reactive-interaction-gateway/docs/features.html#picking-up-backend-events-and-forwarding-them-to-clients-based-on-subscriptions#synchronously) - if you don't want to manage a (potentially complex) message broker system like Kafka.
17
+
- forwarding client requests to backend services either synchronously, asynchronously or a mix of both:
18
+
-[synchronously](https://accenture.github.io/reactive-interaction-gateway/docs/features.html#synchronously) - if requests are being sent synchronously, RIG acts as a reverse proxy: RIG forwards the request to an HTTP endpoint of a backend service, waits for the response and sends it to the client.
19
+
-[asynchronously - fire&forget](https://accenture.github.io/reactive-interaction-gateway/docs/features.html#asynchronously---fireforget) - RIG transforms a HTTP request to a message for asynchronous processing and forwards it to the backend asynchronously using either Kafka, NATS or Amazon Kinesis.
20
+
-[synchronously with asynchronous response](https://accenture.github.io/reactive-interaction-gateway/docs/features.html#synchronously---asnychronous-response) - a pseudo-synchronous request: RIG forwards the client request to the backend synchronously via HTTP and waits for the backend response by listening to Kafka/NATS and forwarding it to the still open HTTP connection to the frontend.
21
+
-[asynchronously with asynchronous response](https://accenture.github.io/reactive-interaction-gateway/docs/features.html#asynchronously---asnychronous-response) - a pseudo-synchronous request: RIG forwards the client request to the backend asynchronously via Kafka or NATS and waits for the backend response by listening to Kafka/NATS and forwarding it to the still open HTTP connection to the frontend.
67
22
68
-
### API Documentation
23
+
Built on open standards, RIG is very easy to integrate – and easy to replace – which means low-cost, low-risk adoption. Unlike other solutions, RIG does not leak into your application – no libraries or SDKs required. Along with handling client requests and publishing events from backend to the frontend, RIG provides [many out-of-the-box features](https://accenture.github.io/reactive-interaction-gateway/docs/features.html#out-of-the-box-features).
69
24
70
-
RIG exposes its API documentation on its API endpoint under [/swagger-ui](http://localhost:4010/swagger-ui). For integration into an existing swagger UI, the related JSON document can either be [retrieved at runtime](http://localhost:4010/swagger-ui/rig_api_swagger.json) or [found on disk](./priv/static/rig_api_swagger.json) after compiling RIG at least once.
25
+
This is just a basic summary of what RIG can do. There is a comprehensive documentation available on our [website](https://accenture.github.io/reactive-interaction-gateway/docs/intro.html). If you have any unanswered question, check out the [FAQ](https://accenture.github.io/reactive-interaction-gateway/docs/faq.html) section to get them answered.
71
26
72
-
### Metrics
73
-
74
-
RIG exposes Metrics in [Prometheus](https://prometheus.io/) format on its API endpoint under [/metrics](http:localhost:4010/metrics)
27
+
## Getting Started
75
28
76
-
## Contribute
29
+
- Take a look at the [getting-started tutorial](https://accenture.github.io/reactive-interaction-gateway/docs/tutorial.html) for a simple walkthrough using docker
30
+
- For deploying RIG on Kubernetes, check out the [Kubernetes deployment instructions](https://github.com/Accenture/reactive-interaction-gateway/tree/284-document-sync-async-http-to-kafka/deployment)
77
31
78
-
-**Use issues for everything.**
79
-
- For a small change, just send a PR.
80
-
- For bigger changes open an issue for discussion before sending a PR.
See the [developer's guide](https://accenture.github.io/reactive-interaction-gateway/docs/rig-dev-guide.html) and [CONTRIBUTING.md](./CONTRIBUTING.md) for details.
34
+
- discuss RIG on [Slack](https://rig-slackin.herokuapp.com)
35
+
- Follow us on [Twitter](https://twitter.com/reactivegateway)
36
+
- Start contributing: refer to our [contributing guide](./CONTRIBUTING.md)
37
+
- Develop RIG: refer to our [developer's guide](https://accenture.github.io/reactive-interaction-gateway/docs/rig-dev-guide.html)
91
38
92
39
## License
93
40
@@ -105,5 +52,3 @@ Kudos to these awesome projects:
Copy file name to clipboardExpand all lines: deployment/README.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -20,8 +20,11 @@ Check out the [Helm v2 README](./reactive-interaction-gateway-helm-v2/README.md)
20
20
kubectl apply -f kubectl/rig.yaml
21
21
```
22
22
23
+
23
24
## Some Additional information
24
25
26
+
Check out the [getting-started tutorial](https://accenture.github.io/reactive-interaction-gateway/docs/tutorial.html), the [examples](https://accenture.github.io/reactive-interaction-gateway/docs/examples.html) and the [features](https://accenture.github.io/reactive-interaction-gateway/docs/features.html) for more information what you can do with RIG.
27
+
25
28
### Communication
26
29
27
30
Both `kubectl` and `helm` deploy bunch of Kubernetes resources:
RIG exposes its API documentation on its API endpoint under [/swagger-ui](http://localhost:4010/swagger-ui). For integration into an existing swagger UI, the related JSON document can either be [retrieved at runtime](http://localhost:4010/swagger-ui/rig_api_swagger.json) or found on disk at `priv/static/rig_api_swagger.json` after compiling RIG at least once.
Copy file name to clipboardExpand all lines: docs/api-gateway.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -180,7 +180,7 @@ The endpoint expects the following request format:
180
180
### Wait for response
181
181
182
182
Sometimes it makes sense to provide a simple request-response API to something that runs asynchronously on the backend. For example, let's say there's a ticket reservation process that takes 10 seconds in total and involves three different services that communicate via message passing. For an external client, it may be simpler to wait 10 seconds for the response instead of polling for a response every other second.
183
-
A behavior like this can be configured using an endpoints'`response_from` property. When set to `kafka`, the response to the request is not taken from the `target` (e.g., for `target` = `http` this means the backend's HTTP response is ignored), but instead it's read from a Kafka topic. In order to enable RIG to correlate the response from the topic with the original request, RIG adds a correlation ID to the request (using a query parameter in case of `target` = `http`, or backed into the produced CloudEvent otherwise). **Backend services that work with the request need to include that correlation ID in their response; otherwise, RIG won't be able to forward it to the client (and times out).**
183
+
A behavior like this can be configured using an endpoints' `response_from` property. When set to `kafka`, the response to the request is not necessarily taken from the `target`, e.g., for `target` = `http` this means the backend's HTTP response might be ignored - it's the responsibility of the backend service where to read the response from: If the backend returns with the HTTP code `202 Accepted`, the response will be read from a Kafka topic. If the backend returns a different HTTP code (can be `200` or `400` or whatever makes sense), only then the response will be read synchronously from the http target directly (this allows the backend to return cached responses). In order to enable RIG to correlate the response from the kafka topic with the original request, RIG adds a correlation ID to the request (using a query parameter in case of `target` = `http`, or baked into the produced CloudEvent otherwise). Backend services that work with the request need to include that correlation ID in their response; otherwise, RIG won't be able to forward it to the client (and times out).
184
184
185
185
Configuration of such API endpoint might look like this:
Copy file name to clipboardExpand all lines: docs/architecture.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,7 +21,7 @@ Why not introduce (connection) state for microservices? Two reasons. First, it m
21
21
22
22
## Event-Driven Architecture and the UI
23
23
24
-
Forwarding events to frontends enables and event-driven UX design, effectively extending the idea of [event-driven architecture](https://en.wikipedia.org/wiki/Event-driven_architecture) to the UI.
24
+
Forwarding events to frontends enables an event-driven UX design, effectively extending the idea of [event-driven architecture](https://en.wikipedia.org/wiki/Event-driven_architecture) to the UI.
25
25
26
26
We believe that hiding asynchronism by turning it into a fake synchronous process is an anti-pattern. For example, sending money from one bank account to another doesn't happen instantaneously, but with at least two events: "transfer requested" and "transfer completed" (or "transfer failed"). Acknowledging this when designing the UI leads to a more natural user experience and less loading indicators.
0 commit comments