Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

WAMP extension for nameko

Project Description

nameko wamp

Web Application Messaging Protocol (WAMP) for the nameko microservices framework

Nameko Wamp provides Extensions for WAMP PUB-SUB and RPC. Here is a (silly) example service implementing WAMP entrypoints and dependencies.

from nameko_wamp.extensions.dependencies import Caller, Publisher
from nameko_wamp.extensions.entrypoints import consume, callee


class WeatherService:

    name = "weather_service"

    # a Dependency used to make remote procedure calls over WAMP.
    # note that we don't need to know what nameko service implements
    # a particular remote procedure.
    caller = Caller()
    # another Dependency to publish messages to Topics.
    publihser = Publisher()

    @callee
    def get_weather(self):
        # the weather is always sunny here!
        return "sunny"

    @consume
    def weather_updates(self, topic_data):
        # and do something with the new weather data here
        pass

One method is marked as a “callee”, which is a WAMP Role, and another is marked as a WAMP “caller” Role. The former is callable over RPC and is (almost) exactly the same as the nameko rpc Extension. The latter consumes from a WAMP Topic and appears exactly the same as the nameko event_handler Extension.

There is also the dependency injection caller. Yet another WAMP Role, this allows outgoing RPC calls from your service to other nameko services. Finally the WAMP Role publisher dependency which allows a service API to publish messages to WAMP Topics.

Wampy

Under the hood nameko-wamp uses wampy as the Client Peer - and the Router Peer when running tests is Crossbar.io.

You can use a stand-alone wampy Client to interact with your nameko services too. See the wampy project for more details, but the standard pattern is:

with Client(router=router) as client:
    result = client.rpc.get_weather()
    assert result == "sunny"

    # and publish to a Topic
    client.publish(topic="foobar", message={...})

Note that when I call a remote procedure there is no reference to the service that provides it - and this is different to core nameko where a service name must be provided. This simpler behaviour is explained by the Router Peer which maintains all the registrations and subscriptions on behalf of WAMP clients implementing these Roles.

Run Tests

$ pip install --editable .[dev]
$ py.test ./test -vs
Release History

Release History

This version
History Node

0.2.0

History Node

0.1.1

History Node

0.1.0

Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
nameko_wamp-0.2.0-py2.py3-none-any.whl (12.4 kB) Copy SHA256 Checksum SHA256 py2.py3 Wheel Sep 11, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting