Как обрабатывать несколько протобуфф-сообщений в одной очереди rabbitq - PullRequest
0 голосов
/ 15 апреля 2020

Моя проблема в том, что я использую одну очередь (в качестве точки входа в мой сервис) и использую Go приемник для обработки входящих сообщений.

Мой потребитель

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

Мои проблемы в том, что мой потребитель жестко привязан к обработке только запросов GetRequest. Если мне нужно обработать другой тип сообщения ie. AddRequest: либо

  1. Мне нужно определить новую очередь для каждого сообщения, либо

  2. Мне нужно проверить, не первый ли не является (GetRequest), и продолжить тестирование, если оно может быть нематериально до (AddRequest)

Есть ли другой хороший способ сделать это (при условии, что # 1 не является хорошим вариантом)

1 Ответ

0 голосов
/ 15 апреля 2020

Если ваш потребитель может обрабатывать только некоторые сообщения, перенаправленные в очередь, из которой он потребляет, и потребитель не может быть расширен для обработки различных типов сообщений, вам нужно будет предотвратить попадание сообщений в очередь в первое место. Это работа для сервера RabbitMQ и, возможно, производителя.

Вы не предоставили достаточно информации, которая позволяет нам предлагать, как настроить обмены, очереди и привязки RabbitMQ. Возможно, сообщения содержат некоторую информацию заголовка, которая позволяет серверу RabbitMQ различать guish различных типов сообщений. Если такой информации нет, возможно, производители сообщений могут быть расширены для добавления такой информации заголовка.

Просто отклонить (NACK) сообщение, которое ваш потребитель не может обработать, - плохая идея. Это просто поместит сообщение обратно в ту же очередь. Если нет другого потребителя, который может обработать его, это сообщение никогда не будет успешно использовано (ACK).

...