我是 RabbitMQ 的新手,我遇到了一个问题。我正在尝试通过 API 方法从队列中获取消息。我已经做到了,现在我想通过标头或属性从队列中获取消息(如果可能的话)。我阅读了有关 HTTP API 的文档。我还没有找到这样的API来通过某些标头或属性过滤消息。
我使用这种 API 从队列中获取消息:
/api/queues/vhost/name/get
在体内:
{"count":20,"ackmode":"ack_requeue_true","encoding":"auto"}
我在想,也许可以以某种方式在主体中传递一些过滤器,这样它就可以过滤并返回我想要的消息。
我尝试过进入身体
type = "myType"
或header = "myHeader"
我已经做到了,现在我想按标题或从队列中获取消息 如果可能的话,财产。
RabbitMQ 仅按队列中的顺序传递消息。一旦消息进入队列,就无法进行过滤。
但是,您可以在消息发布到交换时对其进行过滤。使用标头交换并根据标头值绑定队列。然后,每个队列将包含您期望的消息,然后您可以从中使用它们。
RabbitMQ 教程中有一个部分使用“标头交换”。以此为指导。
最后仅使用HTTP API进行测试。这是一种非常低效的检索消息的方式。
参加聚会有点晚了,但我认为你可以像这样实现同样的目标
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 -> { });