An Absinthe pipeline phase to throttle the number of queries that are resolved simultaneously.
defmodule MyApp.Throttler do
use AbsintheThrottle,
adapter: AbsintheThrottle.Adapter.Semaphore,
arguments: [name: :resolve,
size: 1,
error: {:error, message: :custom_error, code: 123}]
end
defmodule MyApp.Router do
# ...
plug Absinthe.Plug,
schema: MyApp.Schema,
pipeline: {MyApp.Throttler.Plug, :pipeline}
# ...
end
# or
"""
{
document {
id
}
}
"""
|> Absinthe.Pipeline.run(MyApp.Throttler.pipeline(MyApp.Schema))
You can implement a custom throttler using any throttling mechanism by implementing the transaction/2
callback, see: AbsintheThrottle.Adapter.Semaphore.
If available in Hex, the package can be installed
by adding absinthe_throttle
to your list of dependencies in mix.exs
:
def deps do
[
{:absinthe_throttle, "~> 0.4.0"}
]
end
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/absinthe_throttle.