activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "James Strachan" <james.strac...@gmail.com>
Subject Re: I can’t receive more than 2 messages simultaneously with DefaultMessageListenerContainer
Date Mon, 19 Feb 2007 13:51:31 GMT
I replied on the other thread you created on the spring forum.

These FAQ entries could be useful...
http://activemq.apache.org/i-do-not-receive-messages-in-my-second-consumer.html
http://activemq.apache.org/what-is-the-prefetch-limit-for.html

How many messages are you sending? If its less than 50,000 then I'd
reduce your prefetch value to something small (1 or 2).


On 2/17/07, cafe <rmilian@estudiantes.uci.cu> wrote:
>
> I have a listener (in the server side) who receive request for send files
> (Streams):
>
> public class RequestUpdateListener implements SessionAwareMessageListener {
>
>         private JmsTemplate jmsTemplate;
>
>         private String fileUpdateLocation;
>
>         public void onMessage(Message request, Session session) throws
> JMSException {
>
>
>                 ActiveMQConnectionFactory connectionFactory =
> ((PooledConnectionFactory) jmsTemplate
>
> .getConnectionFactory()).getConnectionFactory();
>
>                 FileInputStream fis = null;
>                 try {
>                         fis = new FileInputStream(new
> File(fileUpdateLocation));
>                         StreamSender ss = new StreamSender();
>                         ss.send(connectionFactory, fis,uuid);
>
>                 } catch (Exception e) {
>                         e.printStackTrace();
>                 }
>
>         }
> .............
>
> and a class:
>
> public class StreamSender {
>
>         public void send(ConnectionFactory connectionFactory,
> FileInputStream fis, String uuid) {
>
>                 try {
>
>                         connection = (ActiveMQConnection)
> connectionFactory.createConnection();
>                         session = connection.createSession(true,
> Session.AUTO_ACKNOWLEDGE);
>                         Destination destination =
> session.createQueue("TransferQueue");
>
>                         int deliveryMode = DeliveryMode.NON_PERSISTENT;
>                         int priority = 1;
>                         long timeToLive = 0;
>
>                         outputStreamMQ =
> connection.createOutputStream(destination, prop, deliveryMode, priority,
>                                         timeToLive);
>
>
>                         int total = 0;
>                         int reads;
>                         byte[] array = new byte[8 * 1024];
>
>                         while ((reads = fis.read(array)) != -1) {
>                                 outputStreamMQ.write(array, 0, reads);
>                         }
>
>                         JmsUtils.commitIfNecessary(session);
> ......
>
> and again the spring container:
>
>         <bean id="updateContainer"
>
> class="org.springframework.jms.listener.DefaultMessageListenerContainer">
>                 <property name="concurrentConsumers" value="50" />
>                 <property name="connectionFactory" ref="jmsFactory" />
>                 <property name="destination" ref="requestUpdateQueue" />
>                 <property name="messageListener" ref="requestUpdateListener"
> />
>         </bean>
>
>
>
> and in the client side I have a listener who receive the Stream:
>
> public class NotificationListener implements SessionAwareMessageListener {
>
>
>         public void onMessage(Message response, Session session) throws
> JMSException {
>
>                 String message = "xml descriptor";
>                 jmsTemplate.convertAndSend(requestUpdateQueue, message, new
> MessagePostProcessor() {
>                         public Message postProcessMessage(Message message)
> throws JMSException {
>                                 ....
>                                 return message;
>                         }
>                 });
>
>                 StreamReceiver receiver = new StreamReceiver();
>                 receiver.setConnectionFactory(connectionFactory);
>                 receiver.receive();
>
>         }
>
> public class StreamReceiver {
>
>
>         public void receive() {
>                 ...
>                 try {
>
>                         connection = (ActiveMQConnection)
> connectionFactory.createConnection();
>                         session = connection.createSession(true,
> Session.AUTO_ACKNOWLEDGE);
>                         Destination destination =
> session.createQueue("TransferQueue");
>                         fisMQ = connection.createInputStream(destination,
> selector);
>                         fos = new FileOutputStream("...");
>
>                         int reads;
>                         int total = 0;
>                         byte[] array = new byte[8 * 1024];
>
>                         while ((reads = fisMQ.read(array)) != -1) {
>                                 fos.write(array, 0, reads);
>                                 total += reads;
>                                         }
>                         JmsUtils.commitIfNecessary(session);
> .........
>
> Now the problem arise when more than 2 client running in different machines
> does a request simultaneously, the server (StreamSender) stop the transfer
> without any exception
>
> what could be this?
> --
> View this message in context: http://www.nabble.com/I-can%E2%80%99t-receive-more-than-2-messages-simultaneously-with-DefaultMessageListenerContainer-tf3245123s2354.html#a9020869
> Sent from the ActiveMQ - Dev mailing list archive at Nabble.com.
>
>


-- 

James
-------
http://radio.weblogs.com/0112098/

Mime
View raw message