https://github.com/am-kantox/ack
Tiny drop-in for painless acknowledgements across different applications.
https://github.com/am-kantox/ack
ack acknowledgements elixir elixir-lang
Last synced: about 1 month ago
JSON representation
Tiny drop-in for painless acknowledgements across different applications.
- Host: GitHub
- URL: https://github.com/am-kantox/ack
- Owner: am-kantox
- Created: 2019-03-11T15:54:57.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-05-28T04:13:16.000Z (11 months ago)
- Last Synced: 2024-10-30T00:47:07.280Z (6 months ago)
- Topics: ack, acknowledgements, elixir, elixir-lang
- Language: Elixir
- Size: 63.5 KB
- Stars: 6
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
#  Ack [](https://kantox.com/)  
**Tiny drop-in for painless acknowledgements across different applications.**
## About

To implement `ack` support between two applications, one might use `Ack` application with a very little amount of code needed.
Imagine we have two applications, `App1` and `App2` as shown above. When `App1` sends _something_ to `App2` it might require the acknowledgement back confirming the successful processing of this _something_. For instance, `App1` might call an API endpoint of `App2`, which triggers a long process, or it might place a message into RabbitMQ and expect to receive an `ack` to perform some cleanup, or whatever.
Using `Ack`, one should only:
- add `Ack` to the list of applications started with `App1`
- implement [`Envio.Subscriber`](https://hexdocs.pm/envio/Envio.Subscriber.html) in `App1`, listening to any of three following channels:
- `{Ack.Horn, :ack}`
- `{Ack.Horn, :nack}`
- `{Ack.Horn, :error}`
- implement `App2` to `HTTP POST` to `App1.domain:30009` one of two requests (assuming `key` is somewhat negotiated upgront and known to `App1`):
- `%{"key" => key, "value" => "ack"}` to `ack`, or
- `%{"key" => key, "value" => "nack"}` to `nack`That’s it.
## Installation
The package can be installed by adding `ack` to your list of dependencies **and** applications in `mix.exs`:
```elixir
def deps, do: [{:ack, "~> 0.1"}, ...]
def applications, do: applications: [:logger, ..., :ack, ...]
```## [Documentation](https://hexdocs.pm/ack)