我有一个 Java 程序,可以向 RabbitMQ 发送消息。我只知道交易所名称。没有队列、绑定等。
我的问题是:我怎样才能看到程序是否成功发送这些,只知道交换名称?
谢谢。
问候, 塞尔班
我有一个 Java 程序,可以向 RabbitMQ 发送消息。我只知道交易所名称。没有队列、绑定等。
我的问题是:我怎样才能看到程序是否成功发送这些,只知道交换名称?
谢谢。
问候, 塞尔班
您可以使用 RabbitMQ启用发布者确认。这就像有一个发送事务,RabbitMQ 会告诉你消息是否发送成功。
请看这里:https ://www.rabbitmq.com/tutorials/tutorial-three-java.html
String queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, EXCHANGE_NAME, "");
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope,
AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body, "UTF-8");
System.out.println(" [x] Received '" + message + "'");
}
};
channel.basicConsume(queueName, true, consumer);
简而言之,您必须:
重要的是要知道exchange
你有什么样的绑定,因为绑定可以在fanout
或topic
或之间改变direct
在这个例子中是fanout
假设我们有 RabbitMQ Exchange,我们需要创建一个队列来将消息推送到 Exchange 并从队列中使用它,如下所示
私有静态最终字符串 EXCHANGE_NAME = "2022"; 私有静态最终字符串 QUEUE_NAME = "2022"; 私有最终静态布尔持久=真; // 现在我们需要创建一个到 rabbitmq 服务器的连接 // ConnectionFactory 工厂 = new ConnectionFactory(); factory.setUsername("客人"); factory.setPassword("客人"); factory.setVirtualHost("/"); factory.setHost("127.0.0.1"); factory.setPort(5672); 连接连接 = factory.newConnection(); // 创建rabbitmq连接通道 频道频道 = conn.createChannel(); //声明交换// channel.exchangeDeclare(EXCHANGE_NAME, "topic", true); // 推送消息到rabbitmq exchange channel.basicPublish(EXCHANGE_NAME, "routingkey", null, yourmessage.getBytes());
上面作为生产者的工作现在我们需要创建队列消费者
私有静态最终字符串 EXCHANGE_NAME = "2022"; 私有静态最终字符串 QUEUE_NAME = "2022"; 私有最终静态布尔持久=真; // 现在我们需要创建一个到 rabbitmq 服务器的连接 // ConnectionFactory 工厂 = new ConnectionFactory(); factory.setUsername("客人"); factory.setPassword("客人"); factory.setVirtualHost("/"); factory.setHost("127.0.0.1"); factory.setPort(5672); 连接连接 = factory.newConnection(); // 创建rabbitmq连接通道 频道频道 = conn.createChannel(); channel.exchangeDeclare(EXCHANGE_NAME, "topic", true); //队列声明 // channel.queueDeclare(QUEUE_NAME, true, false, false, null); //队列绑定 // channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "routingkey"); // 队列消费 // QueueingConsumer 消费者 = 新 QueueingConsumer(channel); 而(真) { QueueingConsumer.Delivery 交付 = consumer.nextDelivery(); 字符串消息 = new String(delivery.getBody()); System.out.println(" [x] 收到'" + 消息 + "'"); }