Tiny drop-in for painless acknowledgements across different applications.
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 withApp1
- implement
Envio.Subscriber
inApp1
, listening to any of three following channels:{Ack.Horn, :ack}
{Ack.Horn, :nack}
{Ack.Horn, :error}
- implement
App2
toHTTP POST
toApp1.domain:30009
one of two requests (assumingkey
is somewhat negotiated upgront and known toApp1
):%{"key" => key, "value" => "ack"}
toack
, or%{"key" => key, "value" => "nack"}
tonack
That’s it.
The package can be installed by adding ack
to your list of dependencies and applications in mix.exs
:
def deps, do: [{:ack, "~> 0.1"}, ...]
def applications, do: applications: [:logger, ..., :ack, ...]