You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Alex Rudyy (JIRA)" <ji...@apache.org> on 2017/02/10 16:05:41 UTC
[jira] [Created] (QPIDJMS-264) Incoming messages are dispatched out
of order
Alex Rudyy created QPIDJMS-264:
----------------------------------
Summary: Incoming messages are dispatched out of order
Key: QPIDJMS-264
URL: https://issues.apache.org/jira/browse/QPIDJMS-264
Project: Qpid JMS
Issue Type: Bug
Components: qpid-jms-client
Affects Versions: 0.20.0
Reporter: Alex Rudyy
Priority: Critical
Both current trunk version and version 0.20.0 of JMS Client can dispatch incoming messages out of order into client application. I did not test earlier versions. The messages are received in the right order but Client dispatches them occasionally out of order.
I used the following code to reproduce the issue with trunk version of Java Broker.
{code}
public static void main(String[] args) throws Exception
{
for (int i=0;i<100;i++)
{
execute(i);
}
}
public static void execute(int iteration) throws Exception
{
System.out.println("Iteration " + iteration);
Connection managingConnection = createConnection();
Session session = managingConnection.createSession(Session.SESSION_TRANSACTED);
Connection consumingConnection = createConnection();
Session consumerSession = consumingConnection.createSession(true, Session.SESSION_TRANSACTED);
Queue queue = createTestQueue(session, "Q3-test");
session.commit();
MessageConsumer consumer = consumerSession.createConsumer(queue);
Connection producingConnection = createConnection();
Session producerSession = producingConnection.createSession(true, Session.SESSION_TRANSACTED);
MessageProducer producer = producerSession.createProducer(queue);
producer.send(producerSession.createTextMessage("msg1"));
producer.send(producerSession.createTextMessage("msg2"));
producer.send(producerSession.createTextMessage("msg3"));
producer.send(producerSession.createTextMessage("msg4"));
producerSession.commit();
consumingConnection.start();
TextMessage tm = (TextMessage) consumer.receive();
System.out.println(">" + tm.getText());
if (!"msg1".equals(tm.getText()))
{
throw new RuntimeException("Unexpected");
}
deleteQueue(session, "Q3-test");
consumingConnection.close();
producingConnection.close();
managingConnection.close();
}
private static Queue createTestQueue(Session session, String queueName) throws JMSException
{
MessageProducer producer = session.createProducer(session.createQueue("$management"));
MapMessage createMessage = session.createMapMessage();
createMessage.setStringProperty("type", "org.apache.qpid.Queue");
createMessage.setStringProperty("operation", "CREATE");
createMessage.setString("name", queueName);
createMessage.setString("object-path", "org.apache.qpid.Queue");
producer.send(createMessage);
if (session.getTransacted())
{
session.commit();
}
return session.createQueue(queueName);
}
private static void deleteQueue(Session session, String queueName)throws JMSException
{
MessageProducer producer = session.createProducer(session.createQueue("$management"));
MapMessage createMessage = session.createMapMessage();
createMessage.setStringProperty("type", "org.apache.qpid.Queue");
createMessage.setStringProperty("operation", "DELETE");
createMessage.setStringProperty("index", "object-path");
createMessage.setStringProperty("key", queueName);
producer.send(createMessage);
if (session.getTransacted())
{
session.commit();
}
}
private static Connection createConnection() throws JMSException, NamingException {
Properties properties = new Properties();
properties.put("java.naming.factory.initial", "org.apache.qpid.jms.jndi.JmsInitialContextFactory");
properties.put("connectionfactory.myFactoryLookup", "amqp://localhost:5672");
Context context = new InitialContext(properties);
try
{
ConnectionFactory factory = (ConnectionFactory) context.lookup("myFactoryLookup");
return factory.createConnection("admin", "admin");
}
finally
{
context.close();
}
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org