美文网首页
nameko中的事件(消息)触发~nameko系列之五

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

作者: andrew_su_cd | 来源:发表于2018-11-13 19:00 被阅读0次

    基于事件或消息的处理,是一种编程方法,属于异步处理,与传统的同步编程思路大不一样。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,然后可以对数据任意处理。

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

    相关文章

      网友评论

          本文标题:nameko中的事件(消息)触发~nameko系列之五

          本文链接:https://www.haomeiwen.com/subject/bkglfqtx.html