的您好,所有 的
在RabbitMQ
中使用ubuntu
和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的第二个参数是什么意思....
非常感谢
答案 0 :(得分:1)
第一个选项是检索单个邮件。 noAck参数是布尔表示自动确认或否。如果设置为no,则需要手动确认。
详情请见: 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/
我用过它。它简单明了。