Hi Team,
we are having issue isse with recive functionality.
Scenario - There are 10 message available in ServiceBus Queue.
Step 1 - Received only one message and acknowledged successfully.
ISSUE - One message removed immediately and remaining 9 message moved
into *dead
letter queue* after elapsing lock duration. "Max delivery count" is 1 for
queue.
Reason - When i performed *receive() *operation, message delivery count
increasing for all message. As i know, receive operation can receive only
message.
I don't know why "receive()" operation increasing delivery count to all
message instead of 1.
Could you please suggest your opinion for resolving this issue.
Please find below code snippet. I am using "qpid-jms-client - 0.32.0".
//Code Snippet
package com.test;
import java.util.Hashtable;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.naming.Context;
import javax.naming.InitialContext;
public class TestReceive {
public static void main(String[] args) throws Exception {
Destination destination = null;
// set up JNDI context
Hashtable<String, String> hashtable = new Hashtable<>();
hashtable.put("connectionfactory.SBCF", "failover:(amqps://" + "
XXXXX.servicebus.windows.net" +
")?failover.reconnectDelay=2000&failover.maxReconnectAttempts=-1&jms.forceAsyncSend=true&amqp.idleTimeout=180000&transport.connectTimeout=180");
hashtable.put("queue.QUEUE", "qName");
hashtable.put(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.qpid.jms.jndi.JmsInitialContextFactory");
Context context = new InitialContext(hashtable);
ConnectionFactory cf = (ConnectionFactory) context.lookup("SBCF");
destination = (Destination) context.lookup("QUEUE");
// Create Connection
Connection connection = cf.createConnection("****Username****",
"************password**********");
connection.setExceptionListener(new ConnectionExceptionListener());
Session session = connection.createSession(false,
Session.CLIENT_ACKNOWLEDGE);
Queue queue = (Queue) context.lookup("QUEUE");
MessageConsumer messageConsumer = session.createConsumer(queue);
connection.start();
System.out.println("*** Connection Start ****");
Message message = messageConsumer.receive(1000);
long jmsTimestamp = message.getJMSTimestamp();
System.out.println("jmsTimestamp :: " + jmsTimestamp);
message.acknowledge();
System.out.println("**** END ***");
connection.close();
context.close();
}
}
Regards,
Abhishek Kumar