Установить / получить DeliveryTag RabbitMQ при публикации - PullRequest
0 голосов
/ 10 июля 2019

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

Вот моя ситуация:

1) Я создаю задание (задание а), которое создает много сообщений, обработка которых может занять много времени. Одновременно может быть запущено несколько заданий.

2) Я использую одну очередь

3) Я использую один приемник

4) Мне нужна возможность «удалить» все сообщения для задания а.

Если бы я знал, что такое тег доставки, я мог бы просто подтвердить каждое сообщение, чтобы «удалить» только те, которые я хочу из очереди.

Заранее спасибо.

1 Ответ

0 голосов
/ 11 июля 2019

Вы можете установить пользовательские заголовки для каждого сообщения следующим образом:

Издатель:

byte[] messageBodyBytes = System.Text.Encoding.UTF8.GetBytes("Hello, world!");
IBasicProperties props = model.CreateBasicProperties();
props.ContentType = "text/plain";
props.DeliveryMode = 2;
props.Headers = new Dictionary<string, object>();
props.Headers.Add("header",  value);
model.BasicPublish(exchangeName,
               routingKey, props,
               messageBodyBytes);

Ссылка: https://www.rabbitmq.com/dotnet-api-guide.html#publishing

У потребителя у вас есть доступ к BasicProperties.

Потребитель:

public override void HandleBasicDeliver(string consumerTag, ulong deliveryTag, bool redelivered, string exchange, string routingKey, IBasicProperties properties, byte[] body)

        {

            header_value = // Read the value from the properites variable

            if (header_value matches) {
                // Reject or delete the message
                _channel.BasicReject(deliveryTag, false);
            }
            else {
                // Accept the message and do your processing
                _channel.BasicAck(deliveryTag, false);
            }

        }

Ссылка: https://www.tutlane.com/tutorial/rabbitmq/csharp-read-messages-from-rabbitmq-queue

Я использую RabbitMQ с pika, который является python клиентом. Я не очень хорошо владею C# или .NET, но надеюсь, это поможет!

...