cspex alternatives and similar packages
Based on the "Queue" category.
Alternatively, view cspex alternatives based on common mentions on social networks and blogs.
-
kaffe
An opinionated Elixir wrapper around brod, the Erlang Kafka client, that supports encrypted connections to Heroku Kafka out of the box. -
task_bunny
TaskBunny is a background processing application written in Elixir and uses RabbitMQ as a messaging backend -
hulaaki
DISCONTINUED. DEPRECATED : An Elixir library (driver) for clients communicating with MQTT brokers(via the MQTT 3.1.1 protocol). -
adap
Create a data stream across your information systems to query, augment and transform data according to Elixir matching rules. -
exdisque
Elixir client for Disque (https://github.com/antirez/disque), an in-memory, distributed job queue.
InfluxDB - Purpose built for real-time analytics at any scale.
Do you think we are missing an alternative of cspex or a related project?
Popular Comparisons
README
CSPEx
A library that brings all the CSP joy to the Elixir land.
The aim of this library is to make it simple to work with CSP channels alongside Elixir actors and supervision trees, so that we can have another tool in our pockets, choosing it where it fits best.
Highly inspired on Go channels and Clojure core.async library.
Suggestions and pull requests are more than welcome.
Examples
You can simply create a channel and pass it to other processes:
channel = Channel.new
pid = spawn_link fn ->
# This line will block until the data is read
Channel.put(channel, :some)
Channel.put(channel, :data)
end
Process.alive?(pid) #=> true
Channel.get(channel) #=> :some
Process.alive?(pid) #=> true
Channel.get(channel) #=> :data
Process.alive?(pid) #=> false
Or you can use a channel as part of a supervision tree:
import Supervisor.Spec
children = [
worker(Channel, [[name: MyApp.Channel]])
]
{:ok, pid} = Supervisor.start_link(children, strategy: :one_for_one)
spawn_link fn ->
# This line will block until some data is written to the channel
data = Channel.get(MyApp.Channel)
IO.puts "I read #{inspect data} from the channel."
end
Channel.put(MyApp.Channel, :data)
In any of the cases you can use a channel like any Enumerable or Colectable:
# Wraps the process name into a channel struct
# Works with PIDs too
my_channel = Channel.wrap(MyApp.Channel)
spawn_link fn ->
# Blocks until all the values can be written
Enum.into(1..10, my_channel)
end
# The buffer size means how many values I can put in a channel until it
# starts blocking.
other_channel = Channel.new(buffer_size: 10)
# The code bellow will block until the channel "my_channel" is closed.
for x <- my_channel, into: other_channel do
x * 2
end
Installing
Add the dependency to the mix.exs file:
deps: [{:cspex, "~> x.x.x"}, ...]
Add the following snippet to anywhere you want to use it:
use CSP
Be happy!
Documentation
Online documentation is available here.
License
The CSPEx source code is licensed under the MIT License
*Note that all licence references and agreements mentioned in the cspex README section above
are relevant to that project's source code only.