Publisher-subscriber patternΒΆ

In order to use the publisher-subscriber paradigm, you need to define at least one event transport

The currently implemented event transports are

  • gemstone.event.transport.RabbitMqEventTransport
  • gemstone.event.transport.RedisEventTransport
class ExampleService(gemstone.MicroService):
    # ...
    event_transports = [
        gemstone.events.transport.RedisEventTransport("redis://127.0.0.1:6379/0"),
        gemstone.events.transport.RedisEventTransport("redis://redis.example.com:6379/0"),
        # ...
    ]
    # ...

After that, for publishing an event, you must call the gemstone.MicroService.emit_event() method

@gemstone.exposed_method()
def some_method(self):
    self.emit_event("test_event", {"message": "hello there"})
    self.emit_event("method_calls", {"method": "some_method"})
    # ...

In order to subscribe to some kind of events, you need to designate a method as the event handler

@gemstone.event_handler("test_event")
def my_event_handler(self, event_body):
    self.logger.info("Received event: {}".format(event_body))

Note

Event handler methods will be executed on the main thread, so they should not be blocking.