summaryrefslogtreecommitdiff
path: root/Que/tutorial.md
blob: 6542ad3c8a0077620cdeb5ffb067ae6c3e805f57 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
% que.run Tutorial

## Ques

A que is a multi-consumer, multi-producer channel available anywhere you
have a network connection. If you are familiar with Go channels, they
are pretty much the same thing. Put some values in one end, and take
them out the other end at a different time, or in a different process.

Ques are created dynamically for every HTTP request you make. Here we
use the `que` client to create a new que at the path `pub/new-que`:

    que pub/new-que

The `que` client is useful, but you can use anything to make the HTTP
request, for example here's the same thing with curl:

    curl https://que.run/pub/new-que

These requests will block until a value is placed on the other
end. Let's do that now. In a separate terminal:

    echo "hello world" | que pub/new-que -

This tells the `que` client to read the value from `stdin` and then send
it to `example/new-que`. Or with curl:

    curl https://que.run/pub/new-que -d "hello world"

This will succeed immediately and send the string "`hello world`" over
the channel, which will be received and printed by the listener in the
other terminal.

You can have as many producers and consumers attached to a channel as
you want.

## Namespaces

Ques are organized into namespaces, identified by the first fragment of
the path. In the above commands we used `pub` as the namespace, which is
a special publically-writable namespace. The other special namespace is
`_` which is reserved for internal use only. You can't write to the `_`
namespace.

To use other namespaces and add authentication/access controls, you can
[sign up for the Power package](/_/index).

## Events

Just reading and writing data isn't very exciting, so let's throw in
some events. We can very quickly put together a job processor.

    que pub/new-que --then "./worker.sh '{msg}'"