【发布时间】:2015-10-30 09:53:06
【问题描述】:
我有一个用 Java 编写的程序,可以向 RabbitMQ 发送消息。我只知道交易所名称。没有队列、绑定等。
我的问题是:我如何才能看到程序是否成功发送这些,只知道交换名称?
谢谢。
问候, 塞尔维亚
【问题讨论】:
标签: rabbitmq rabbitmq-exchange
我有一个用 Java 编写的程序,可以向 RabbitMQ 发送消息。我只知道交易所名称。没有队列、绑定等。
我的问题是:我如何才能看到程序是否成功发送这些,只知道交换名称?
谢谢。
问候, 塞尔维亚
【问题讨论】:
标签: rabbitmq rabbitmq-exchange
您可以使用 RabbitMQ 启用 publisher confirmation。这就像一个发送事务,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] 收到'" + 消息 + "'"); }【讨论】: