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

jk9hmnmh  于 2024-01-05  发布在  Java
关注(0)|答案(1)|浏览(189)

我正在为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#

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

  1. import org.apache.qpid.protonj2.client.*;
  2. import org.apache.qpid.protonj2.client.exceptions.ClientException;
  3. public class RabbitMQConsumer {
  4. public static void main(String[] args) {
  5. String brokerUrl = "amqp://your.rabbitmq.server:port";
  6. String exchangeName = "yourExchangeName";
  7. try {
  8. Client client = Client.create();
  9. Connection connection = client.connect(brokerUrl);
  10. Session session = connection.openSession();
  11. // Assuming RabbitMQ creates a server-named queue and binds it when the consumer connects
  12. Receiver receiver = session.openReceiver(exchangeName);
  13. receiver.handler((delivery, message) -> {
  14. String body = message.getBody().toString();
  15. // Process message
  16. System.out.println("Received message: " + body);
  17. });
  18. receiver.open();
  19. System.out.println("Connected to exchange and waiting for messages...");
  20. // Keep the application running to listen for messages
  21. Thread.currentThread().join();
  22. } catch (ClientException | InterruptedException e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. }

字符串

展开查看全部

相关问题