【问题标题】:Set/Get DeliveryTag RabbitMQ on Publish在发布时设置/获取 DeliveryTag RabbitMQ
【发布时间】:2019-07-09 21:34:31
【问题描述】:

是否可以在我在发布者客户端代码中发布的消息上设置传递标签?是否可以获得我在发布者客户端中发布的消息的传递标签?

这是我的情况:

1) 我正在创建一个作业(作业 a),它会创建许多可能需要很长时间才能处理的消息。一次可以运行多个作业。

2) 我正在使用单个队列

3) 我使用的是单个接收器

4) 我希望能够“删除”作业 a 的所有消息。

如果我知道传递标签是什么,那么我可以确认每条消息以从队列中“删除”我想要的那些。

提前致谢。

【问题讨论】:

  • 投递标签如何与作业 A 的消息相关联?
  • 您可以为消息设置自定义标题并删除与该值匹配的消息。
  • @Lutz,我的想法是,如果我知道消息的传递标签,那么我可以随时确认该传递标签,并且消息将被出列。
  • @bumblebee 如何通过自定义标头删除消息?在单个客户端/发布者(无接收者)中,如果我设置自定义标头值然后发布消息,您是说我可以在删除刚刚创建的那些消息后立即创建一个 for 循环?你是怎样做的?那绝对可以满足我的需要。

标签: c# .net-core rabbitmq


【解决方案1】:

您可以通过以下方式为每条消息设置自定义标头:

出版商:

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

我正在使用RabbitMQpika,这是一个python 客户端。我对C#.NET 不是很流利,但我希望这会有所帮助!

【讨论】:

  • 感谢您的回复,但这在我的情况下不起作用。如果必须,这是我可以做的事情,但在我的情况下并不理想。你解释的正是我想做的(逻辑上),除非没有消费者/听众。假设消费者不存在,我该怎么做?我的用例是这样的。我有 10 条消息。 5 个属于 MyProcess1,5 个属于 MyProcess2。不保证订单。没有消费者。我想运行 MyDeleteMessageApplication 来删除/确认与 MyProcess1 关联的所有消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多