Multiple service subscription

I have a question about event subscription. Let’s say I have an exception tracking service. Is there an easy way with the event API to make it subscribe to any services that would publish an ‘exception’ event so that I don’t have to re-deploy it if I add a new service in my application ?


Nameko Events doesn’t support this kind of “wildcard” subscription. You subscribe to a particular event type from a particular service.

However, Nameko Events is just a particular way of using the underlying Publisher and Consumer extensions. You can implement the pattern you want with that pair.

Runnable example:

from nameko.messaging import Publisher, consume
from nameko.timer import timer

from kombu import Exchange, Queue

exception_exchange = Exchange("exceptions", type="topic")
exception_queue = Queue("exceptions_queue", exchange=exception_exchange, routing_key="*.exception")

class ServiceA:
    name = "a"

    publish = Publisher()

    def throws(self):
        self.publish("a: foo", exchange="exceptions", routing_key="a.exception")

class ServiceB:
    name = "b"

    publish = Publisher()

    def throws(self):
        self.publish("b: bar", exchange="exceptions", routing_key="b.exception")

class ServiceC:
    name = "c"

    publish = Publisher()

    def throws(self):
        self.publish("c: baz", exchange="exceptions", routing_key="c.exception")

class ExceptionTracker:
    name = "tracker"

    def handle_exception(self, payload):
        # consume decorator doesn't expose the underlying routing key,
        # but you could always just put that in the payload
        print("error in service:", payload)

Thanks a lot. :sunglasses: