I have the route and processor below reading a JMS message and writing the
contents to a file via SFTP. When the SFTP component cannot connect (in my
test, wrong user) after 6 attempts, I have what seems to be a deadlock on
the writer close. Am I doing something wrong? Also, with or without the
connection issue, over time 10 producer template threads are created. Don't
know why this happens as I thought that there would only be 2 that would
support the 2 JMS consumers.

Camel version 2.12.1

Spring snippet:

    <bean id="myProcessor" class="MyProcessor">
        <property name="producerTemplate" ref="myProducer"></property>
    </bean>
    
    <camel:template id="myProducer" camelContextId="test"/>
    
        <camel:camelContext id="test">
            
                <camel:route>
                        <camel:from 
uri="jms:queue:from?concurrentConsumers=2"></camel:from>
                        <camel:process ref="myProcessor"></camel:process>
                </camel:route>
                        
        </camel:camelContext>

MyProcessor class:

public class MyProcessor implements Processor {
        
        private ProducerTemplate producerTemplate;

        @Override
        public void process(Exchange exchange) throws Exception {
                
                String uri = "sftp://host:81/To?username=user&password=mypass";;
                
                PipedOutputStream pipedOutputStream = new PipedOutputStream();
                PipedInputStream pipedInputStream = new
PipedInputStream(pipedOutputStream);
                
                Endpoint endpoint = exchange.getContext().getEndpoint(uri);
                Exchange newExchange = endpoint.createExchange();
                newExchange.getIn().setBody(pipedInputStream, 
InputStream.class);
                
                Future<Exchange> future = 
this.getProducerTemplate().asyncSend(endpoint,
newExchange);
                
                Writer writer = new OutputStreamWriter(pipedOutputStream);
                
                writer.write(exchange.getIn().getBody(String.class));
                
                writer.close();
                
                future.get();
        }

        public ProducerTemplate getProducerTemplate() {
                return producerTemplate;
        }

        public void setProducerTemplate(ProducerTemplate producerTemplate) {
                this.producerTemplate = producerTemplate;
        }
}




--
View this message in context: 
http://camel.465427.n5.nabble.com/ProducerTempate-asyncSend-using-PipedInputStream-tp5748300.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to