Hi,
My JNDI setup was fine, both using dynamicQueues/QueueName and both using
ActiveMQInitalcontextFactory (see src, I'm shoving them into a properties
object
then passing that to InitialContext()).
It started to work when I abandoned using a MessageListener and instead had
each consumer create a thread with a busy loop polling
MessageConsumer.recieveNoWait()
(hmm, just thinking, it would be best just to block on recieve() until a
message comes
thru...) anyway, it all worked when I did this.
Is the onMessage broken? Or am I doing something bizarre in not getting it
to
work correct? Here's my updated code:
private void bootstrap() {
try {
final Context context = new InitialContext(getContext());
final QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory) context.lookup("QueueConnectionFactory");
final Queue queue = (Queue) context.lookup(getQueueName());
final QueueConnection queueConnection =
queueConnectionFactory.createQueueConnection();
final QueueSession queueSession =
queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
queueConnection.start();
messageConsumer =
queueSession.createConsumer(queueSession.createQueue("queryQueue"));
queueSession.createReceiver(queue);
new Thread(this).start();
System.out.println("Started " + getName() + " on queue " +
queue.getQueueName());
} catch(Exception e) {
logger.error(e);
}
}
public String getName() {
return name;
}
public String getQueueName() {
return queueName;
}
public void run() {
Message message = null;
while(true) {
try {
message = messageConsumer.receiveNoWait();
} catch(JMSException e) {
logger.error(e);
}
if(message != null) {
onMessage(message);
}
try {
Thread.sleep(50);
} catch(InterruptedException e) {
}
}
}
public void onMessage(final Message message) {
try {
if(message instanceof ObjectMessage) {
final LoggingEvent loggingEvent = (LoggingEvent)
((ObjectMessage) message).getObject();
Logger.getLogger(loggingEvent.getLoggerName()).info(loggingEvent.getRenderedMessage());
} else if(message instanceof TextMessage) {
final String payload = ((TextMessage) message).getText();
System.out.println(payload);
logger.info(payload);
}
} catch(JMSException e) {
logger.error(e);
}
}
private Properties getContext() {
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.activemq.jndi.ActiveMQInitialContextFactory");
properties.put(Context.PROVIDER_URL, "tcp://jmsserver:61616");
return properties;
}
James.Strachan wrote:
>
> Sounds like you may have a mix up in your JNDI configuration. Try
> looking in JMX at the consumers to see what they are subscribing to
> and check that they are using the correct queue names etc.
>
> e.g. you might want to use exactly the same code to get the Queue on
> both producer and consumer to save you making a mistake on one side.
>
>
> On 8/24/06, dharrigan <[EMAIL PROTECTED]> wrote:
>>
>> Hi,
>>
>> Using 4.0.1 on Linux.
>>
>> I'm trying to consume some messages from a set of queues that I've
>> defined.
>>
>> Queue 1, 2, 3 and 4
>>
>> These are created by a factory that instantiates 4 instances of a class,
>> passing in the name of the queue that the instantiated class should
>> monitor.
>> However, nothing is coming off the queue and I can see in the JMX console
>> that I have about 1,900 messages waiting for me to pickup...
>>
>> Here's my code:
>>
>> First the producer:
>>
>> private void doIt() throws Exception {
>> final Context context = new
>> InitialContext(getContextProperties());
>> final QueueConnectionFactory queueConnectionFactory =
>> (QueueConnectionFactory) context.lookup("QueueConnectionFactory");
>> final Queue queue =
>> (Queue)context.lookup("dynamicQueues/queryQueue");
>> final QueueConnection queueConnection =
>> queueConnectionFactory.createQueueConnection();
>> final QueueSession queueSession =
>> queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
>> final QueueSender queueSender = queueSession.createSender(queue);
>> final TextMessage textMessage = queueSession.createTextMessage();
>> queueConnection.start();
>> for(int i = 0 ; i < 10 ; i++) {
>> textMessage.setText("Hello World! " + i);
>> System.out.println("Sending message with text : " +
>> textMessage.getText());
>> queueSender.send(textMessage);
>> }
>> queueSender.send(queueSession.createMessage());
>> queueConnection.close();
>> }
>>
>> private Properties getContextProperties() {
>> Properties properties = new Properties();
>> properties.put(Context.INITIAL_CONTEXT_FACTORY,
>> "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
>> properties.put(Context.PROVIDER_URL,
>> "tcp://jmsserver:61616?jms.useAsyncSend=true");
>> return properties;
>> }
>> }
>>
>>
>>
>> Now the consumer:
>>
>>
>> private void bootstrap() {
>> try {
>> final Context context = new InitialContext(getContext());
>> final QueueConnectionFactory queueConnectionFactory =
>> (QueueConnectionFactory) context.lookup("QueueConnectionFactory");
>> final Queue queue = (Queue) context.lookup(getQueueName());
>> final QueueConnection queueConnection =
>> queueConnectionFactory.createQueueConnection();
>> final QueueSession queueSession =
>> queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
>> queueSession.createReceiver(queue);
>> queueSession.setMessageListener(this);
>> queueConnection.start();
>> System.out.println("Started " + getName() + " on queue " +
>> queue.getQueueName());
>> } catch(Exception e) {
>> logger.error(e);
>> }
>> }
>>
>> public String getName() {
>> return name;
>> }
>>
>> public String getQueueName() {
>> return queueName;
>> }
>>
>> public void onMessage(final Message message) {
>> try {
>> if(message instanceof ObjectMessage) {
>> final LoggingEvent loggingEvent = (LoggingEvent)
>> ((ObjectMessage) message).getObject();
>>
>> Logger.getLogger(loggingEvent.getLoggerName()).info(loggingEvent.getRenderedMessage());
>> } else if(message instanceof TextMessage) {
>> final String payload = ((TextMessage) message).getText();
>> System.out.println(payload);
>> logger.info(payload);
>> }
>> } catch(JMSException e) {
>> logger.error(e);
>> }
>> }
>>
>> private Properties getContext() {
>> Properties properties = new Properties();
>> properties.put(Context.INITIAL_CONTEXT_FACTORY,
>> "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
>> properties.put(Context.PROVIDER_URL, "tcp://jmsserver:61616");
>> return properties;
>> }
>>
>> Any help would be very very much appreciated!
>>
>> -=david=-
>> --
>> View this message in context:
>> http://www.nabble.com/Can%27t-get-messages-off-the-queue%21-tf2158965.html#a5965055
>> Sent from the ActiveMQ - User forum at Nabble.com.
>>
>>
>
>
> --
>
> James
> -------
> http://radio.weblogs.com/0112098/
>
>
--
View this message in context:
http://www.nabble.com/Can%27t-get-messages-off-the-queue%21-tf2158965.html#a5979542
Sent from the ActiveMQ - User forum at Nabble.com.