有没有办法消费来自RabbitMQ交换的消息(而不是产生消息)

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

我正在通过 AMQP 1.0 协议为第三方 RabbitMQ 代理开发消费者。我无法使用消息,因为第三方要求我们通过连接到 RabbitMQ 交换来使用消息。据我了解,交换是用于生产消息而不是消费消息。

第三方坚持从exchange进行消费,并且没有提供任何队列名称。如果我的理解有误,请帮助我,并提供任何可以支持我的图书馆参考。

解决方案设计。

  1. 协议:AMQP 1.0
  2. 客户端库:Apache ProtonJ2
  3. 经纪商产品:RabbitMQ
  4. 编程语言:Java 17

ICD 提供以下见解,

  1. Exchange:- 交换器不绑定到任何队列
  2. 生产者:- 生产者正在发送消息,但由于交换被机器人绑定到任何队列,因此这些消息被丢弃。
  3. Consumer:- 一旦消费者连接到交换器,RabbitMQ 就会创建一个名为队列的服务器并将其绑定到交换器。
  4. 消费者:- 当绑定队列包含消息时,消费者开始从交换器接收消息。请注意,消费者尚未创建与此名为队列的服务器的任何连接。消费者只能连接到exhcnage

请帮助我在质子库示例中做到这一点。

java rabbitmq qpid-proton
1个回答
0
投票

由于您没有为代码提供更多信息,我会用基本的消费者样板来回答:

import org.apache.qpid.protonj2.client.*;
import org.apache.qpid.protonj2.client.exceptions.ClientException;

public class RabbitMQConsumer {
    public static void main(String[] args) {
        String brokerUrl = "amqp://your.rabbitmq.server:port";
        String exchangeName = "yourExchangeName";

        try {
            Client client = Client.create();
            Connection connection = client.connect(brokerUrl);
            Session session = connection.openSession();

            // Assuming RabbitMQ creates a server-named queue and binds it when the consumer connects
            Receiver receiver = session.openReceiver(exchangeName);

            receiver.handler((delivery, message) -> {
                String body = message.getBody().toString();
                // Process message
                System.out.println("Received message: " + body);
            });

            receiver.open();
            System.out.println("Connected to exchange and waiting for messages...");

            // Keep the application running to listen for messages
            Thread.currentThread().join();
        } catch (ClientException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.