2017-05-15 15 views
2

次のプロセッサを使用して、電子メールの最初の添付ファイルを取得し、ftp-serverにアップロードします。Apache Camel ftpへの添付ファイルをアップロードする

ルート設定

<from uri="imaps://... 
<to uri="ejb:java:global/Dms/MailProcessor"/> 
<to uri="ftp://.... 

MailProcessor

@Named("MailProcessor") 
@Stateless 
public class MailProcessor implements Processor { 

    @Override 
    public void process(Exchange exchange) throws Exception { 

     exchange.getOut().setHeaders(exchange.getIn().getHeaders()); 

     Map<String, DataHandler> attachments = exchange.getIn().getAttachments(); 
     if (attachments.size() > 0) { 
      for (String name : attachments.keySet()) { 
       DataHandler dataHandler = attachments.get(name); 

       // SET ATTACHMENT FILENAME TO OUTPUT FILENAME HEADER 
       String filename = dataHandler.getName(); 
       filename = MimeUtility.decodeText(filename); 
       exchange.getOut().setHeader("filename", filename); 

       // SET INPUT ATTACHMENT TO OUTPUT BODY 
       byte[] data = exchange.getContext().getTypeConverter().convertTo(byte[].class, dataHandler.getInputStream()); 
       exchange.getOut().setBody(data); 

       // SET ONLY THE FIRST ATTACHMENT 
       break; 
      } 
     }else{ 
      exchange.getOut().setBody(exchange.getIn().getBody()); 
    } 

} 

これは、一般的に動作しますが、それは "大きな" 添付ファイルの文字通り永遠にかかります。

byte[] data = exchange.getContext().getTypeConverter().convertTo(byte[].class, dataHandler.getInputStream()); 
exchange.getOut().setBody(data); 

が、これは私に次を与える:私もこのような添付ファイルを変換しようとした

TRACE [org.apache.camel.component.file.remote.FtpOperations] (Camel (example) thread #119 - imaps://mail.example.com) Changing directory: upload 
TRACE [org.apache.camel.component.file.remote.FtpOperations] (Camel (example) thread #119 - imaps://mail.example.com) doStoreFile(ID-example-local-59752-1494841993139-21-11) 
DEBUG [org.apache.camel.component.file.remote.FtpOperations] (Camel (example) thread #119 - imaps://mail.example.com) About to store file: ID-example-local-59752-1494841993139-21-11 using stream: [email protected] 
TRACE [org.apache.camel.component.file.remote.FtpOperations] (Camel (example) thread #119 - imaps://mail.example.com) Client storeFile: ID-example-local-59752-1494841993139-21-11 
-- long pause -- 

(ちょうど5メガバイトの取り付けのための半分の時間)

ログイン:

2017-05-15 11:23:20,968 TRACE [org.apache.camel.impl.converter.DefaultTypeConverter] (Camel (example) thread #133 - imaps://mail.example.com) Converting org.apache.camel.Processor$$$view63 -> org.apache.camel.Processor with value: Proxy for view class: org.apache.camel.Processor of EJB: MailProcessor 
2017-05-15 11:23:20,968 TRACE [org.apache.camel.component.bean.BeanProcessor] (Camel (example) thread #133 - imaps://mail.example.com) Using a custom adapter as bean invocation: Proxy for view class: org.apache.camel.Processor of EJB: MailProcessor 
2017-05-15 11:23:20,990 TRACE [org.apache.camel.impl.converter.DefaultTypeConverter] (Camel (example) thread #133 - imaps://mail.example.com) Converting com.sun.mail.util.BASE64DecoderStream -> byte[] with value: [email protected] 
2017-05-15 11:23:20,990 TRACE [org.apache.camel.impl.converter.DefaultTypeConverter] (Camel (example) thread #133 - imaps://mail.example.com) Using converter: StaticMethodTypeConverter: public static byte[] org.apache.camel.converter.IOConverter.toBytes(java.io.InputStream) throws java.io.IOException to convert [class com.sun.mail.util.BASE64DecoderStream=>class [B] 
2017-05-15 11:23:20,990 TRACE [org.apache.camel.util.IOHelper] (Camel (example) thread #133 - imaps://mail.example.com) Copying InputStream: [email protected] -> OutputStream: with buffer: 4096 and flush on each write false 
-- long pause -- 

Filを使用してftpサーバーにアップロードするエジラは魅力のように動作します。また、別のルート(ファイルのアップロードによって起動される)でcamel-ftpを使用する場合、ftpサーバーへのアップロードはかなり速く動作します。 私はそれが物事を遅くする添付ファイルの変換だと感じている。

質問:

が正しい私の仮定であるとどのように私は物事をスピードアップすることができますか?

答えて

関連する問題