HTTP Bridge Subscriber

Introduction

The HTTP Subscriber feature is available starting with Crossbar 0.10.3.

The HTTP Subscriber is a service that forwards PubSub events to HTTP endpoints.

Try it

Clone the Crossbar.io examples repository, and go to the rest/subscriber subdirectory.

Now start Crossbar:

crossbar start

This example is configured to subscribe all events sent to the com.myapp.topic1 topic to httpbin.org/post. If you publish a message using the HTTP Publisher configured in the example, it will forward the message and print the response of the message in Crossbar’s debug log:

curl -H "Content-Type: application/json" \
    -d '{"topic": "com.myapp.topic1", "args": ["Hello, world"]}' \
    http://127.0.0.1:8080/publish

Configuration

The HTTP Subscriber is configured as a WAMP component. Here it is as part of a Crossbar configuration:

{
    "workers": [
        {
            "type": "container",
            "options": {
                "pythonpath": [".."]
            },
            "components": [
                {
                    "type": "class",
                    "classname": "crossbar.adapter.rest.MessageForwarder",
                    "realm": "realm1",
                    "extra": {
                        "subscriptions": [
                            {"url": "https://httpbin.org/post",
                             "topic": "com.myapp.topic1"}
                        ],
                        "method": "POST",
                        "expectedcode": 200,
                        "debug": true
                    },
                    "transport": {
                        "type": "websocket",
                        "endpoint": {
                            "type": "tcp",
                            "host": "127.0.0.1",
                            "port": 8080
                        },
                        "url": "ws://127.0.0.1:8080/ws"
                    }
                }
            ]
        }
    ]
}

The subscriber is configured through the extra dictionary:

option

description

subscriptions

A list of dictionaries which each MUST contain “url” and “topic” keys. The “url” key is a full URL with http or https (for example, “https://example.org/endpoint”), and the topic is the exact topic which events will be forwarded from. (required)

method

The HTTP method which the forwarding requests will be made with. (optional, “POST” by default)

expectedcode

The HTTP status code which is expected from the requests. If none is given, the status code is not checked. (optional)

debug

If true, then the response body will be printed to Crossbar’s debug log. (optional, false by default)

Handling Forwarded Events

The Subscriber, upon recieving a PubSub event that it has been configured to subscribe to, will send a request to the URL associated with the topic. The body will be a JSON encoded dictionary and contain two keys, "args" and "kwargs" from the PubSub event. Here is an example Flask application that prints the pubsub event to the terminal:

import json
from flask import Flask, request
app = Flask(__name__)

@app.route("/", methods=["POST"])
def message():
    body = json.loads(request.get_data())
    print("args:", body["args"], "kwargs:", body["kwargs"])
    return b"OK"

if __name__ == "__main__":
    app.run()

When this server is started, Crossbar is configured to forward the event to it, and the example event at the top of the page is published, you should see:

$ python ~/example.py
 * Running on http://127.0.0.1:5000/
('args:', [u'Hello, world'], 'kwargs:', {})
127.0.0.1 - - [21/Apr/2015 21:01:05] "POST / HTTP/1.1" 200 -