0

大家好

RabbitMQubuntu与 jJava 一起使用时我有两个问题。

首先,如何从队列中获取消息?有两种“正确”的方式,例如:

ConnectionFactory factory = new ConnectionFactory(params);  
Connection conn = factory.newConnection("localhost", 5672);  
Channel channel = conn.createChannel(); 
String message=channel.basicGet("queuename", noAck).getBody();

另一个是

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare("queuename", true, false, false, null);
QueueingConsumer consumer = new QueueingConsumer(channel);
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());

那么哪一个是正确的?如果两者都是,它们之间有什么区别?

第二,如何知道队列中的消息数?也就是说,我想检查队列是否为空。

是否有一些我可以使用的 API?channel.basicGet?

如果队列中有一些消息ack,会channel.basicGet返回什么?实际上,我不知道 channel.basicGet 的第二个参数是什么意思......

非常感谢

4

1 回答 1

1

第一个选项是检索单个消息。noAck 参数是布尔值,表示是否自动确认。如果设置为否,则需要手动确认。

更多信息请访问: http ://www.rabbitmq.com/api-guide.html

第二个选项使用 QueueingConsumer。用于缓冲服务器推送给我们的消息的类。您还可以在此选项中创建队列:

channel.queueDeclare("queuename", true, false, false, null);

在此处查看有关此选项的更多信息:http ://www.rabbitmq.com/tutorials/tutorial-one-java.html

最后一件事。如果您熟悉Spring,我建议您也阅读一下: http ://docs.spring.io/spring-integration/docs/latest-ga/reference/html/

我用过。它简单明了。

于 2013-08-05T07:38:46.913 回答