在 RabbitMQ 中通过属性或标头获取消息

问题描述 投票:0回答:2

我是 RabbitMQ 的新手,我遇到了一个问题。我正在尝试通过 API 方法从队列中获取消息。我已经做到了,现在我想通过标头或属性从队列中获取消息(如果可能的话)。我阅读了有关 HTTP API 的文档。我还没有找到这样的API来通过某些标头或属性过滤消息。

我使用这种 API 从队列中获取消息:

/api/queues/vhost/name/get

在体内:

{"count":20,"ackmode":"ack_requeue_true","encoding":"auto"}

我在想,也许可以以某种方式在主体中传递一些过滤器,这样它就可以过滤并返回我想要的消息。

我的消息是这样的:

我尝试过进入身体

type = "myType"
header = "myHeader"

rabbitmq message-queue messaging
2个回答
3
投票

我已经做到了,现在我想按标题或从队列中获取消息 如果可能的话,财产。

RabbitMQ 仅按队列中的顺序传递消息。一旦消息进入队列,就无法进行过滤。

但是,您可以在消息发布到交换时对其进行过滤。使用标头交换并根据标头值绑定队列。然后,每个队列将包含您期望的消息,然后您可以从中使用它们。

RabbitMQ 教程中有一个部分使用“标头交换”。以此为指导。

最后仅使用HTTP API进行测试。这是一种非常低效的检索消息的方式。


0
投票

参加聚会有点晚了,但我认为你可以像这样实现同样的目标

ConnectionFactory factory = new ConnectionFactory();
factory.setHost(hostname);
Connection conn = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueBind(queueName, exchangeName, "");
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
        Map<String, Object> headers = delivery.getProperties().getHeaders();
        String message = new String(delivery.getBody(), "UTF-8");
        System.out.println(" [x] Received '" + message + "', with header : " + headers.get("TestHeader") );
    };
channel.basicConsume(queue, true, deliverCallback, consumerTag -> { });
© www.soinside.com 2019 - 2024. All rights reserved.