如何在 minos 中发布自定义代理消息?
python 192
原文标题 :How can I publish custom broker messages in minos?
我想发送一条消息来通知我的一个微服务中的某些内容,但我不想通过域事件来做到这一点,这需要创建、更新或删除微服务的实体之一。
是否有另一种发送消息的方法,以便其他微服务可以处理它们?
回复
我来回复-
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
,只是为了给消息的内容一些结构而创建的(但它可以是另一种类型,如int
、str
、dict
等)。最后,如果您想在另一个微服务中处理它,您可以像任何其他消息一样执行此操作:
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年前