java 有没有一种方法可以从RabbitMQ交换中消费消息(而不是生成消息)

jk9hmnmh  于 5个月前  发布在  Java
关注(0)|答案(1)|浏览(65)

我正在为AMQP 1.0协议上的第三方RabbitMQ代理开发一个消费者。由于该第三方要求我们通过连接到RabbitMQ交换机来消费消息,我无法消费消息。据我所知,交换机是用于生产而不是消费消息。
第三方坚持从交易所消费,并且没有提供任何队列名。2如果我理解有误,请帮助我,并提供任何可以支持我的库的参考。
解决方案设计。
1.方案:AMQP 1.0
1.客户端程式库:Apache ProtonJ 2
1.经纪产品:RabbitMQ
1.编程语言:Java 17
ICD提供了以下见解:
1.Exchange:-交换未绑定到任何队列
1.Producer:- Producer正在发送消息,但由于交换无法绑定到任何队列,因此这些消息将被丢弃。
1.Consumer:-一旦消费者连接到交换,RabbitMQ就会创建一个名为queue的服务器,并将其绑定到交换。
1.Consumer:-当绑定队列包含消息时,Consumer开始从交换接收消息。请注意,Consumer尚未创建到该服务器queue的任何连接。Consumer应仅连接到交换
请帮助我以质子库为例来做到这一点。

bogh5gae

bogh5gae1#

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

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();
        }
    }
}

字符串

相关问题