nameko中的事件(消息)触发~nameko系列之五

基于事件或消息的处理,是一种编程方法,属于异步处理,与传统的同步编程思路大不一样。nameko的eventhandler事件处理,做的比较优雅,它的优雅源自现在很牛逼的rabbitmq。nameko使用rabbitmq作为消息中间件,自然对基于消息的处理,得心应手。

先上菜,再解释:

class SenderService:
    name = "sender_service"
    dispatcher = EventDispatcher()

       @rpc
    def dispatch_method(self, payload):
        self.dispatcher("message", payload)

       @timer(2)
    def call_dispatcher_method(self):
        self.dispatcher_method({'message': 'hello world'})


class ReceiverService:
    name = "receiver_service"

       @event_handler("sender_service", "message")
    def handle_event(self, payload):
        print("reciever1 just received message from sender_service @ {}:".format(time.ctime()), payload)


class ReceiverService2:
    name = "receiver_service2"

       @event_handler("sender_service", "message")
    def handle_event(self, payload):
        print("receiver2,just received message from sender_service@ {}:".format(time.ctime()), payload)

说明:

  • sender_service是发送信息的服务,可以使用@rpc装饰器,这样其他的微服务就可以调用。当然,如果本微服务下调用,可以不使用@rpc这个装饰器。
  • 在sender_service中使用了timer,目的是调用发送信息的方法,便于测试 事件触发-》事件处理 的完整流程。
  • receiver_service,是收信息的服务,这里设计了两个接收消息的微服务,为了检测消息或者事件被一个收信息服务接受后,另外的微服务是否还可以接收到。具体的方法,使用@event_handler这个装饰器,装饰器的参数:第一个是微服务名称,第二个是参数,这是最简运用方式。定义的方法中的参数就是获取到的载荷-payload,然后可以对数据任意处理。

基于消息或者事件的编程,是一种非常不错的体验:一是极大的降低应用或功能之间耦合度;二是容易大规模部署。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容