如何在 minos 中发布自定义代理消息?

扎眼的阳光 python 192

原文标题How can I publish custom broker messages in minos?

我想发送一条消息来通知我的一个微服务中的某些内容,但我不想通过域事件来做到这一点,这需要创建、更新或删除微服务的实体之一。

是否有另一种发送消息的方法,以便其他微服务可以处理它们?

原文链接:https://stackoverflow.com//questions/71600241/how-can-i-publish-custom-broker-messages-in-minos

回复

我来回复
  • garciparedes的头像
    garciparedes 评论

    是的!您可以直接使用在相应服务中注入的BrokerPublisher实例来执行此操作。

    如果要发送消息,可以执行以下操作:

    from minos.common import ModelType
    from minos.cqrs import Service
    from minos.networks import Request, enroute
    
    
    MyContent = ModelType.build("MyContent", {"text": str, "number": int})
    
    
    class MyServiceSenderMicroservice(Service):
    
        @enroute.rest.command("/send/my-channel", "POST")
        async def handle_send_my_channel(self, request: Request) -> Response:
            
            # First, create the message.
            message = BrokerMessageV1(
                "MyChannel", BrokerMessageV1Payload(MyContent("foo", 56))
            )
    
            # Then, send it!
            await self.broker_publisher.send(message)
    

    在这种情况下,"MyChannel"是指将发送消息的频道(或主题)。

    注意MyContent是一种方便的ModelType,只是为了给消息的内容一些结构而创建的(但它可以是另一种类型,如intstrdict等)。

    最后,如果您想在另一个微服务中处理它,您可以像任何其他消息一样执行此操作:

    from minos.cqrs import Service
    from minos.networks import Request, enroute
    
    
    class MyServiceReceiverMicroservice(Service):
    
        @enroute.broker.event("MyChannel")
        async def handle_my_channel(self, request: Request):
    
            # Print the received message!
            print(await request.content())
    
    2年前 0条评论