2017-05-04 10 views
0

私のSpring起動アプリケーションでは、インポートサービスを実装する必要があります。ユーザーはJSONファイルの束を提出することができ、アプリケーションはこれらのファイルからデータをインポートしようとします。 JSONファイルのデータ量に応じて、1回のインポート処理に1〜2時間かかります。春の起動と長時間の実行

私はインポートプロセス中にユーザーをブロックしたくないので、私はインポートのためのタスクを受け入れ、このデータの処理がスケジュールされていることをユーザーに通知する予定です。私はデータをキューに入れ、もう片方のフリーキューのコンシューマがインポートプロセスを開始します。また、キュー内のジョブを監視し、必要に応じてジョブを終了する必要があります。

今私はメッセージプロデューサとコンシューマロジックを紹介するために埋め込みApache ActiveMQを使用したいと考えていますが、これ以前にはアーキテクチャの観点から質問したいと思います。より適切なツールで実装することができます。たとえば、プレーンスプリング@Asyncなどのように?

答えて

1

http://camel.apache.org/file2.html

を見てみましょう。この

from("file://incoming?maxMessagesPerPoll=1&idempotent=true&moveFailed=failed&move=processed&readLock=none").threads(5).process() 

のようなキャメルと同時にファイルを処理することが可能ですが、私はあなたの要件は、スタンドアロンのActiveMQを使用することは、スタンドアロンのサービス優れていると思いますActiveMQとスタンドアロンのコンシューマにファイルを移動させて、それぞれを独立して強制終了または再起動できるようにします。

あなたが言ったようにActiveMQを使用することをお勧めします、あなたは簡単にこのようキャメルとキューにメッセージを移動するためのサービスを作成することができますいくつかの例をここで

 CamelContext context = new DefaultCamelContext(); 
     ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=true"); 
     context.addComponent("test-jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory)); 
     context.addRoutes(new RouteBuilder() { 
      public void configure() { 
      // convertBodyTo to use TextMessage or maybe send them as file to the Queue   from("file://testFolderPath").convertBodyTo(String.class).to("test-jms:queue:test.queue"); 
      } 
     }); 
     context.start(); 

http://www.programcreek.com/java-api-examples/index.php?api=org.apache.camel.component.jms.JmsComponent

https://skills421.wordpress.com/2014/02/08/sending-local-files-to-a-jms-queue/

https://github.com/apache/camel/blob/master/examples/camel-example-jms-file/src/main/java/org/apache/camel/example/jmstofile/CamelJmsToFileExample.java

https://github.com/apache/camel/tree/master/examples

監視し、あなたがキューに同時消費者とDefaultMessageListenerContainerを使用することができます消費するVisualVMのかHawtio http://hawt.io/getstarted/index.html

http://camel.apache.org/camel-jmx.html

でJMXを使用することができます管理し、このために、あなたはprefetchPolicyを変更する必要があるために、 DefaultMessageListenerContainerのConnectionFactoryで、Multithreaded JMS client ActiveMQ

関連する問題