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.