我有几个微服务:
- WebClient,将数据从UI发送到其他服务
- Service One可以对来自WebClient的数据执行一些操作,并将其返回给WebClient。
- 服务二,可以将数据从WebClient保存到数据库,并且不向WebClient返回任何内容
在WebClient中,我有一个名为MessageBusClient的类(与RabbitMQ一起使用)。我应该将所有请求发送到这个ONE类中的各种服务,还是应该将此客户端拆分为多个类(例如MessageBusServiceOneClient,MessageBusServiceTwoClient),并以这种方式分离逻辑,而不是使用意大利面条代码?
2条答案
按热度按时间yc0p9oo01#
让一个类负责发送消息是相当正常的,并且会被认为是一件“单一的事情”。但它应该能够处理任何任意消息。如果它需要以不同的方式处理服务1和服务2的消息,您可能需要考虑制作两个单独的版本。
另一种思考方式是基础设施逻辑和业务逻辑。把信息混在一起是基础设施。处理消息是业务逻辑。Ofc,一个好的架构要比这复杂得多。
xpszyzbs2#
您的客户端应该包含能够与RabbitMQ集成的通用逻辑。你不应该在多个地方重复这个逻辑。但是,正如您所注意到的,如果您为消息类型和要发布到的队列引入新方法,您将很快得到一个非常臃肿的客户端。
因此,调用客户端的服务应该构建一条消息,并将其放入队列中,然后将其发送给客户端。客户端可以配置消息类型和它应该发送到的队列之间的Map。然后,它将执行一般逻辑,将消息添加到配置的队列中。