如何使用RabbitMQ实现单一责任原则?

i86rm4rw  于 2023-10-20  发布在  RabbitMQ
关注(0)|答案(2)|浏览(140)

我有几个微服务:

  • WebClient,将数据从UI发送到其他服务
  • Service One可以对来自WebClient的数据执行一些操作,并将其返回给WebClient。
  • 服务二,可以将数据从WebClient保存到数据库,并且不向WebClient返回任何内容

在WebClient中,我有一个名为MessageBusClient的类(与RabbitMQ一起使用)。我应该将所有请求发送到这个ONE类中的各种服务,还是应该将此客户端拆分为多个类(例如MessageBusServiceOneClient,MessageBusServiceTwoClient),并以这种方式分离逻辑,而不是使用意大利面条代码?

yc0p9oo0

yc0p9oo01#

让一个类负责发送消息是相当正常的,并且会被认为是一件“单一的事情”。但它应该能够处理任何任意消息。如果它需要以不同的方式处理服务1和服务2的消息,您可能需要考虑制作两个单独的版本。
另一种思考方式是基础设施逻辑和业务逻辑。把信息混在一起是基础设施。处理消息是业务逻辑。Ofc,一个好的架构要比这复杂得多。

xpszyzbs

xpszyzbs2#

您的客户端应该包含能够与RabbitMQ集成的通用逻辑。你不应该在多个地方重复这个逻辑。但是,正如您所注意到的,如果您为消息类型和要发布到的队列引入新方法,您将很快得到一个非常臃肿的客户端。
因此,调用客户端的服务应该构建一条消息,并将其放入队列中,然后将其发送给客户端。客户端可以配置消息类型和它应该发送到的队列之间的Map。然后,它将执行一般逻辑,将消息添加到配置的队列中。

相关问题