Provide a delivery API to consume notifications in HTTP
Open, HighPublic

Description

In Rust and TCL, AMQP client libraries currently don't give satisfaction.

As a workaround, and also to allow more universal consumers, we provide an AMQP to HTTP gateway as microservice.

API specification

1/delivery
2
3 /delivery/register_consumer
4
5 {
6 "api-key": "<guid allowed to use this API>"
7 "routing-key": "nasqueron.*"
8 }
9
10 {
11 "key": "<key to use for this queue>"
12 }
13
14 /delivery/get_all
15
16 {
17 "key": "<key returned by register_consumer>"
18 "no-ack": false,
19 }
20
21 {
22 "queue": "<key to use for this queue>"
23 "routing-key": "nasqueron.*"
24 "count": 4,
25 'messages": [
26 {},
27 {},
28 {},
29 {}
30 ]
31 }
32
33 /delivery/get
34
35 {
36 "key": "<key returned by register_consumer>",
37 "format": "base64",
38 "no-ack": false,
39 }
40
41 // returns directly the message
42
43 /delivery/ack
44
45 {
46 "key": "<key returned by register_consumer>",
47 "id": 100
48 }
49
50 OR
51
52 {
53 "key": "<key returned by register_consumer>",
54 ids: [
55 101,
56 102,
57 103,
58 104
59 ]
60 }
61
62 /delivery/unregister_consumer
63
64 {
65 "key": "<key returned by register_consumer>",
66 "force": true
67 }
68
69 // `force` allows to specify if we want to drop the queue when there is still at least one message inside
70
71Message
72
73 {
74 "id": 100,
75 "format": "as-is",
76 "content": "..."
77 }
78
79 {
80 "id": 100,
81 "format": "base64",
82 "content": "..."
83 }
84
85 Should we store the content as base64?
86
87nginx
88
89 location /delivery {
90 proxy_pass http://localhost:38080/;
91 include proxy_params;
92 }
93
94 Should we provide a CSS file too?
95
96 location = /delivery/app.css {
97 try_files /app.css @404;
98 }

Methods:

  • /delivery/register_consumer
  • /delivery/get_all
  • /delivery/get
  • /delivery/ack
  • /delivery/unregister_consumer

Related Objects