L.S.,

It should not be necessary to create thread pool sizes this large to
keep the application running.  The most likely cause of your problems
is a message exchange pattern that's not getting handled properly so
exchanges remain pending inside the ESB.

In fact, I think the code snippet you sent us contains an example:
you're using send to send the InOnly exchange, but you never receive
the DONE exchange after the file has been saved by the file:sender
endpoint.  This will cause the seda queues to fill and eventually
stall the processing.

The way to solve this would be by adding a receive() after the send to
receive the DONE exchange or by using sendSync instead of send, that
way you'll remove the pending DONE exchanges from the queue.  Could
you give this a try?

If you would implement this code in a servicemix-bean pojo, you can
use the MessageListener interface to receive these DONE message
exchanges asynchronously.

Regards,

Gert Vanthienen
------------------------
Open Source SOA: http://fusesource.com
Blog: http://gertvanthienen.blogspot.com/



2009/11/9 jcamus <[email protected]>:
>
> Hi!
> I am trying to send into the NMR 2000 messages in a row but ESB seems stuck
> after 1000 messages.
> My design is the following :
> CXF-BC -> CXF-SE -> FileSender
>
> So a SOAP Client is sending 2000 times the same request (in a simple loop,
> so no multithread) and in the CXF-SE here is method called :
>
> Here is the code :
>
> public void sendFile(String filename, byte[] fileContent, String deviceCode,
> int operatorCode) {
>        filename = operatorCode + "-" + deviceCode + "-" + filename;
>        try {
>            InOnly exchange  = getClient().createInOnlyExchange();
>            exchange.setService(m_incomingService);
>            ServiceEndpoint endPoint =
> getClient().getContext().getEndpoint(m_incomingService,
> m_incomingSenderEndpoint);
>            exchange.setEndpoint(endPoint);
>            NormalizedMessage messageToSend = exchange.getInMessage();
>            messageToSend.setProperty(DefaultFileMarshaler.FILE_NAME_PROPERTY,
> filename);
>            DataSource fileSource = new ByteDataSource(fileContent);
>            DataHandler handler = new DataHandler(fileSource);
>            messageToSend.addAttachment(DefaultFileMarshaler.FILE_CONTENT,
> handler);
>            getClient().send(exchange);
>        } catch (Exception e) {
>            m_gLogger.error("Error sendfile : filename " + filename + " 
> deviceCode
> = " + deviceCode + " operatorCode = " + operatorCode, e);
>        }
>    }
>
>  private ServiceMixClient getClient() throws Exception {
>        if (m_client == null) {
>            ClientFactory factory = (ClientFactory) new
> InitialContext().lookup(ClientFactory.DEFAULT_JNDI_NAME);
>            m_client = factory.createClient();
>        }
>        return m_client;
>    }
>
>
>
> I tried to change the values into servicemix.conf like this (without
> success) :
>
> servicemix.corePoolSize    = 64
> servicemix.maximumPoolSize = 1280
> servicemix.queueSize       = 2560
>
> Can you explain me why the ESB freezes? When it happens I have to restart
> the ESB.. and all the messages pending are lost...
> Where am I wrong? Did I forget to free a resource?
>
> If  I replace the code above but a simple copyFile into the CXF-SE it works
> fine...
>
>
>
> --
> View this message in context: 
> http://old.nabble.com/Can%27t-send-2000-messages-into-the-NMR-%3A-ESB-is-stuck-after-1000...-tp26269556p26269556.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>
>

Reply via email to