Barenboim
Conejo
Barenboim is prepared to tackle with data streaming dependencies in concurrent flows.
If your application works with a data streaming and your incoming events could have dependencies between them, the app can have problems about when the dependency data is ready. Reasons:
- The Application which is sending the data is not sending the data in the right order
- Your Application is treating the data concurrently therefore the order is not ensured.
Installation
-
Add
barenboimto your list of dependencies inmix.exs:def deps do[{:barenboim, "~> 0.1.0"}]end
Configuration
-
Barenboim uses poolboy and you can configure it depending on your needs:
config :barenboim,pool_domain: :global, # default :localpool_size: 20, # default 10max_overflow: 3 # default 5
How to use it
Define the function that will retrieve the dependency data where dependency_id is the id of your data
and call Barenboim.get_data. You can also specify a time out in milliseconds.
fun = fn(dependency_id) -> MyDataModule.get(dependency_id) end
{:ok, data} = Barenboim.get_data(dependency_id, fun)
Meanwhile, the flow that is processing a new event has to call ready function when the data is available for others.
Barenboim.ready(dependency_id)
Test
- Run the tests.
mix test