activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cafe <rmil...@estudiantes.uci.cu>
Subject I can’t receive more than 2 messages simultaneously with DefaultMessageListenerContainer
Date Sat, 17 Feb 2007 15:32:01 GMT

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.


Mime
View raw message