在同一个Rabbitq队列中处理多个probbuff消息

问题描述 投票:0回答:1

我的问题是我正在使用单个队列(作为我的服务的入口点),并使用golang使用者处理传入的消息。

我的消费者

    message := pb.GetRequest{}
    err := proto.Unmarshal(msg.Body, message)

我的问题是,我的用户很难只处理GetRequests。如果我需要处理其他类型的消息,即。 AddRequest要么

  1. 我需要为每个消息定义一个新队列,或者

  2. 我需要查看第一个非军事形式(GetRequest),并继续测试是否可以将其非军事化为(AddRequest)

是否还有其他好的方法(提供的#1不是一个好的选择)

go rabbitmq protocol-buffers
1个回答
0
投票

如果您的使用者仅能处理路由到他所使用的队列中的某些消息,而该使用者不能扩展为处理不同类型的消息,则您必须阻止消息在第一个到达队列地点。这是RabbitMQ服务器的工作,可能是生产者的工作。

您没有提供足够的信息,无法让我们建议如何配置RabbitMQ交换,队列和绑定。消息中可能包含一些标头信息,这些信息使RabbitMQ服务器能够区分不同类型的消息。如果没有此类信息,则可以扩展消息生成器以添加此类头信息。

仅拒绝(NACK)您的消费者无法处理的消息是一个坏主意。这只会将邮件放回到同一队列中。如果没有其他使用者可以处理此消息,则将永远不会成功使用此消息(ACK)。

© www.soinside.com 2019 - 2024. All rights reserved.