我的问题是我正在使用单个队列(作为我的服务的入口点),并使用golang使用者处理传入的消息。
我的消费者
message := pb.GetRequest{}
err := proto.Unmarshal(msg.Body, message)
我的问题是,我的用户很难只处理GetRequests。如果我需要处理其他类型的消息,即。 AddRequest要么
我需要为每个消息定义一个新队列,或者
我需要查看第一个非军事形式(GetRequest),并继续测试是否可以将其非军事化为(AddRequest)
是否还有其他好的方法(提供的#1不是一个好的选择)
如果您的使用者仅能处理路由到他所使用的队列中的某些消息,而该使用者不能扩展为处理不同类型的消息,则您必须阻止消息在第一个到达队列地点。这是RabbitMQ服务器的工作,可能是生产者的工作。
您没有提供足够的信息,无法让我们建议如何配置RabbitMQ交换,队列和绑定。消息中可能包含一些标头信息,这些信息使RabbitMQ服务器能够区分不同类型的消息。如果没有此类信息,则可以扩展消息生成器以添加此类头信息。
仅拒绝(NACK)您的消费者无法处理的消息是一个坏主意。这只会将邮件放回到同一队列中。如果没有其他使用者可以处理此消息,则将永远不会成功使用此消息(ACK)。