Hello
I believe I may have uncovered a possible concurrency issue with the way
the Java Broker and/or Client works. It appears if a message consumer
is awaiting a message in receive() before its connection is started, it
is never able to pull from its queue.
I have attached a sample bit of code that hopefully displays this. In
it, I create a temp queue and consumer from a session. Then I create a
sub-thread that creates a producer, sends a message, then tries to
manually have the consumer pull from that queue using cons.receive().
I start the thread, sleep for 2s, and then start the connection. The
consumer hangs while trying to receive the message. According to JMX,
the temp queue I create has both a consumer and a message before I start
the sub-thread.
This is against the M4 versions of the Java Broker and client; I have
also tried the first 0.5 release candidate.
Thanks
WS
public static void main( final String[] args )
throws Exception
{
final AMQConnectionFactory factory = new AMQConnectionFactory(
conUrl );
final Connection con = factory.createConnection();
final Session session = con.createSession( false,
Session.AUTO_ACKNOWLEDGE );
final Destination dest = session.createTemporaryQueue();
final MessageConsumer cons = session.createConsumer( dest );
final Thread t = new Thread( "ProducerTest" ){
public void run() {
MessageProducer pro;
try {
pro = session.createProducer( dest );
final TextMessage msg =
session.createTextMessage();
msg.setText( "help" );
pro.send( msg );
System.err.println( "Waiting to
receive" );
final Message message = cons.receive();
System.err.println( "Got Message : " +
message );
}
catch ( JMSException e ) {
e.printStackTrace();
}
}
};
t.start();
Thread.sleep( 2000l );
con.start();
//ProducerTest thread should hang.
}
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]