restq
restq copied to clipboard
Corvusoft's RestQ framework provides an open HTTP API for technology agnostic and language neutral message broking services.
RestQ
HTTP message broker enabling software solutions to decouple, connect and scale. Designed to accommodate guaranteed delivery, asynchronous processing, non-blocking operations, push notifications, data discovery, worker queues, and many more enterprise patterns.
Features
Feature | Description |
---|---|
Open Standards | Configuration of the broker and message generation is all done via a HTTP RESTful application programming interface. |
Discovery | The ability to query and discover Queues/Subscriptions of importance. |
Decoration | Queues/Subscriptions can be annotated with properties to tag, categorise and aid discovery. |
PubSub | Support for the Publish-Subscribe messaging pattern. |
Message Integrity | Content-MD5 end-to-end message integrity checking (MIC). |
Logging | Customise how and where log entries are created. |
IPv4/IPv6 | Internet Protocol Version 4/6 Network Support. |
Architecture | Asynchronous single or multi-threaded architecture, capable of addressing the C10K problem. |
Address Binding | Bind HTTP and/or HTTPS services to separate IP addresses. |
Community | Active, vibrant and energetic open source community. |
Support | Commercial support is available from Corvusoft. |
Example
See the exchange example for service implementation details.
Create Queue
curl -XPOST http://localhost:1984/queues --data '{ "data": { "name": "biz-logic-events" } }' -H'Content-Type: application/json' -H'Accept: application/json' -H'Host: localhost:1984' -v
HTTP/1.1 201 Created
Expires: 0
Pragma: no-cache
Connection: close
Accept-Ranges: none
Content-Length: 192
Server: corvusoft/restq
ETag: "58929204637930416000"
Allow: GET,PUT,HEAD,DELETE,OPTIONS
Date: Mon, 07 Mar 2016 02:54:57 GMT
Content-MD5: 1FDBFBECFF809C2EC325ACDC83EF7A26
Content-Type: application/json; charset=utf-8
Last-Modified: Mon, 07 Mar 2016 02:54:57 GMT
Cache-Control: private,max-age=0,no-cache,no-store
Location: http://localhost:1984/queues/040ab769-e4ba-40bb-886b-37bb6800baed
Vary: Accept,Accept-Encoding,Accept-Charset,Accept-Language
{ "data": {
"type": "queue",
"modified": 1457319297,
"name": "biz-logic-events",
"revision": "58929204637930416000",
"origin": "[::ffff:127.0.0.1]:61957",
"key": "040ab769-e4ba-40bb-886b-37bb6800baed"
}
}
Create Subscription
curl -XPOST http://localhost:1984/subscriptions --data '{ "data": { "endpoint": "http://localhost:1985", "queues": [ "040ab769-e4ba-40bb-886b-37bb6800baed" ] } }' -H'Content-type: application/json' -H'Accept: application/json' -H'Host: localhost:1984' -v
HTTP/1.1 201 Created
Expires: 0
Pragma: no-cache
Connection: close
Content-Length: 208
Accept-Ranges: none
Server: corvusoft/restq
ETag: "16962065903070504062"
Allow: GET,PUT,HEAD,DELETE,OPTIONS
Date: Mon, 07 Mar 2016 03:07:04 GMT
Last-Modified: Mon, 07 Mar 2016 03:07:04 GMT
Content-MD5: 3A910593944580831B7797F63244505B
Content-Type: application/json; charset=utf-8
Cache-Control: private,max-age=0,no-cache,no-store
Vary: Accept,Accept-Encoding,Accept-Charset,Accept-Language
Location: http://localhost:1984/subscriptions/3a627a94-66da-45e7-a7fb-c700fd877e58
{ "data": {
"type": "subscription"
"modified": 1457320024,
"revision": "16962065903070504062",
"endpoint": "http://localhost:1985",
"origin": "[::ffff:127.0.0.1]:62036",
"key": "3a627a94-66da-45e7-a7fb-c700fd877e58",
}
}
Create Message
curl -XPOST --data 'Payroll server is low on disk space.' 'http://localhost:1984/queues/040ab769-e4ba-40bb-886b-37bb6800baed/messages' -H'Content-Type: text/plain' -H'Accept: application/json' -H'Host: localhost:1984' -v
or
curl -XPOST --data 'Payroll server is low on disk space.' 'http://localhost:1984/messages?name=biz-logic-events' -H'Content-Type: text/plain' -H'Accept: application/json' -H'Host: localhost:1984' -v
HTTP/1.1 202 Accepted
Expires: 0
Allow: OPTIONS
Pragma: no-cache
Connection: close
Accept-Ranges: none
Server: corvusoft/restq
Date: Mon, 07 Mar 2016 03:34:06 GMT
Cache-Control: private,max-age=0,no-cache,no-store
Location: /messages/6dbb7894-3f04-4e71-97c0-aefde07fefb5
Vary: Accept,Accept-Encoding,Accept-Charset,Accept-Language
Given you have a consumer waiting on the subscription endpoint (http://localhost:1985). You'll see the message dispatched. See documentation and the acceptance test suite for further details and configurations.
License
© 2014-2016 Corvusoft Limited, United Kingdom. All rights reserved.
The RestQ framework is dual licensed; See LICENSE for full details.
Support
Please contact [email protected], for support and licensing options including bespoke software development, testing, design consultation, training, mentoring and code review.
Build
git clone --recursive https://github.com/corvusoft/restq.git
mkdir restq/build
cd restq/build
cmake [-DBUILD_TESTS=YES] [-DBUILD_EXAMPLES=YES] [-DBUILD_SSL=NO] [-DBUILD_SHARED=YES] [-DCMAKE_INSTALL_PREFIX=/output-directory] ..
make [-j CPU_CORES+1] install
make test
You will now find all required components installed in the distribution folder.
Please submit all enhancements, proposals, and defects via the issue tracker; Alternatively ask a question on StackOverflow tagged #restq.
Test
The lettuce.py behaviour driven development tool is required to run this test suite.
cd restq
./distribution/example/http_example
lettuce --failfast --random -t-manual test/acceptance/features
The acceptance tests can be located here. They're also a good starting point for developers wishing to integrate with RestQ.
Minimum Requirements
Resource | Requirement |
---|---|
Compiler | C++11 compliant or above |
OS | BSD, Linux, Mac OSX, Solaris, Windows, Raspbian |
Road Map
Milestone | Feature | Status |
---|---|---|
1.0 | Asynchrounous HTTP Service | complete |
1.0 | HTTP 1.0/1.1 Compliance | complete |
1.0 | PubSub Pattern | complete |
1.0 | Custom Formatters | complete |
1.0 | Multi-Threaded service capability | complete |
1.0 | Bind Service to specific Address | complete |
1.0 | Query/Subscription Search | complete |
1.5 | API Documentation | complete |
1.5 | Secure Socket Layer | complete |
1.5 | Simultaneous Network Ports (HTTP/HTTPS) | complete |
1.5 | Signal Handling | complete |
1.5 | Queue Message Limit | complete |
1.5 | Queue Message Size Limit | complete |
1.5 | Queue Subscription Limit | complete |
2.0 | Worker Queue | pending |
2.0 | Custom Compression | pending |
2.0 | Subscription Header Filters | pending |
2.0 | Custom Authentication | pending |
2.0 | Custom Encodings | pending |
2.0 | Custom Character Sets | pending |
2.0 | Custom Dispatches | pending |
2.0 | Localisation | pending |
2.0 | Direct/Indirect Messaging | pending |
2.5 | User Interface | pending |
2.5 | Runtime Modifications | pending |
2.5 | HTTP 2 compliance | pending |
2.5 | Refactor, Reduce, Reuse | pending |
Contact
Method | Description |
---|---|
Tweet us your questions & feature requests. | |
[email protected] | Support related queries. |
[email protected] | Sale related queries. |