Java 是否可以禁用jms的createQueueBrowser的自动确认?
我正在使用createQueueBrowser迭代队列的所有消息,它将在读取后从队列中删除所有消息,我希望在不删除队列中的消息的情况下迭代所有消息。怎么做Java 是否可以禁用jms的createQueueBrowser的自动确认?,java,azure,jms,Java,Azure,Jms,我正在使用createQueueBrowser迭代队列的所有消息,它将在读取后从队列中删除所有消息,我希望在不删除队列中的消息的情况下迭代所有消息。怎么做 public class Receive { ConnectionFactory connectionFactory = null; Connection connection = null; void receivemsg() throws JMSException {
public class Receive {
ConnectionFactory connectionFactory = null;
Connection connection = null;
void receivemsg() throws JMSException {
connectionFactory = new JmsConnectionFactory("RootManageSharedAccessKey",
"Gkt0Egjp/5YTrqAf9z+f2+HoRungEOh4OMSRA69js6M=",
"amqps://amqpqpid.servicebus.windows.net?amqp.idleTimeout=-1");
/*
* connectionFactory = new
* JmsConnectionFactory("RootManageSharedAccessKey",
* "Gkt0Egjp/5YTrqAf9z+f2+HoRungEOh4OMSRA69js6M=",
* "amqps://amqpqpid.servicebus.windows.net?amqp.idleTimeout=-1");
*/
connection = connectionFactory.createConnection();
connection.start();
System.out.println("Receiving messages...");
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
Destination replyQueue = session.createQueue("ackqueue");
//MessageConsumer consumer = session.createConsumer(replyQueue);
TextMessage message = session.createTextMessage();
Queue recieve = session.createQueue("requestor");
QueueBrowser browser = session.createBrowser(recieve);
Enumeration msgs = browser.getEnumeration();
if (!msgs.hasMoreElements()) {
System.out.println("No messages in queue");
} else {
while (msgs.hasMoreElements()) {
Message tempMsg = (Message) msgs.nextElement();
System.out.println("Message: " + tempMsg.getJMSCorrelationID());
if(tempMsg.getJMSCorrelationID().equalsIgnoreCase("helloworld"))
{
System.out.println("matched and acked");
break;
}
}
}
}
public static void main(String args[]) throws JMSException {
Receive receiver = new Receive();
receiver.receivemsg();
System.out.println("Received Messages");
}
}
我查看了ApacheQPID的文档,没有任何方法或选项支持AMQP客户端中的消费者是非破坏性的。Qpid的唯一方法是为Qpid代理服务器端的选项强制设置
true
,但它不适合您当前的场景Azure服务总线队列
在Azure服务总线队列上,有一个RESTAPI可以满足您的需要。因此,您可以参考服务总线队列的官方教程中的一节,以便在下面的代码中进行设置
ReceiveMessageOptions opts = ReceiveMessageOptions.DEFAULT;
opts.setReceiveMode(ReceiveMode.PEEK_LOCK);
希望能有所帮助。Peter如果没有它,我们不应该使用azure java sdk。我们应该能够实现这一点。我对队列浏览器从队列中删除消息感到惊讶。JMS队列浏览器用于浏览队列中的消息而不是删除消息的特定目的。声明符合JMS的消息传递提供程序库必须实现这一点。我想这是Azure JMS实现的一个问题。