Проверка сообщения, а затем добавление его в очередь в случае необходимости в rabbitmq customer - PullRequest
0 голосов
/ 22 января 2020

Я ищу способ для потребителя взять полученное сообщение из очереди, вызвать метод для него, а затем проверить, выполнена ли задача и не перезаписывать ли ее. проверка проста, я проверяю свойство int внутри сообщения, у меня возникают проблемы с ним, потому что оно запускает событие, и вы не можете использовать его внутри события, поэтому вы не можете проверить его внутри ... Есть идеи?

код:

 EventingBasicConsumer consumer = new EventingBasicConsumer(_channel);


                consumer.Received += (model, ea) =>
                {
                    var body = ea.Body;
                    var msg = Encoding.UTF8.GetString(body);
                    var message = JsonConvert.DeserializeObject<MessageWithoutUser>(msg);

                    IBot bot = _factory.GetBot(message);
                    var result = bot.Execute(message.MessageId, message.UserId, message.Likes, message.Service, message.Time);

                    if (CheckResult(result))
                    {
                        _channel.BasicConsume(queue: "messages",

                                    autoAck: true,
                                    consumer: consumer);
                    }
                    else
                    {
                        var newJsonMessage = new MessageWithoutUser { MessageId = message.MessageId, UserId = message.UserId, Likes = result, Service = message.Service, Time = message.Time };
                        var newJson = JsonConvert.SerializeObject(newJsonMessage);
                        Encoding.UTF8.GetBytes(newJson);
                        ea.Body = SerializeMessage(newJsonMessage);
                        _channel.BasicReject(ea.DeliveryTag,true);
                    }

                    Console.ReadLine();
                };

, как вы можете видеть, есть событие .BasicConsume внутри события Received, что невозможно, и именно это я и хочу сделать, взять результат, затем проверить, если его 1 или 0, то на основе этого потреблять или отклонять.

1 Ответ

0 голосов
/ 25 января 2020
  • Вы можете подтвердить сообщение с помощью _channel.BasicAck(ea.DeliveryTag, true)
  • Отклонить сообщение означает запросить такое же сообщение, нет способа изменить уже опубликованное содержимое сообщения.
  • Если вы хотите изменить содержимое сообщения запроса, отклоните его с помощью _channel.BasicReject(ea.DeliveryTag, false), сервер rabbitmq отклонит это сообщение, а затем повторно отправит sh сообщение с вашим пользовательским содержимым.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...