2017-09-12 3 views
1

IOTデバイスがデータを送信するために使用するJava Rest APIがあります。各デバイスには、APIと通信するための期間(たとえば15秒)があります。その期間内に、同じデータセットを持つ複数のメッセージが存在する可能性があります。処理前に待機するJava rest API

私がしたいことは、APIがデバイスから新しいメッセージを受信すると、期間終了まで待機し、受信したメッセージを収集することです。また、期間が終了したときにのみメッセージを処理します。

一定期間メッセージを収集して処理するにはどうすればよいですか?

ありがとうございました。

EDIT スプリングブートを使用。

答えて

0

非同期エンドポイントを使用して、同期RESTを呼び出すようにしてください。タイムアウトに達すると、何をすべきかを定義することができます。

例えば、春ブーツにあなたが呼び出し可能に返すとのTaskExecutorを使用することができます。

@Controller 
public class MyController { 

    @RequestMapping("/endpoint") 
    public @ResponseBody WebAsyncTask<String> handleRequest (HttpServletRequest request) { 

     Callable<String> callable =() -> { 
      return "Callable"; 
     }; 

     ConcurrentTaskExecutor taskExecutor = new ConcurrentTaskExecutor(Executors.newFixedThreadPool(1)); 

     return new WebAsyncTask<>(15000L, taskExecutor, callable); 

    } 
} 

おそらく、タスクエグゼキュータスレッド・プールの春には、いくつかの設定を追加する必要があります。

@SpringBootApplication 
public class AsyncConfigExample { 

    @Bean 
    WebMvcConfigurer configurer(){ 
     return new WebMvcConfigurerAdapter(){ 
      @Override 
      public void configureAsyncSupport (AsyncSupportConfigurer configurer) { 
       ThreadPoolTaskExecutor t = new ThreadPoolTaskExecutor(); 
       t.setCorePoolSize(10); 
       t.setMaxPoolSize(100); 
       t.setQueueCapacity(50); 
       t.setAllowCoreThreadTimeOut(true); 
       t.setKeepAliveSeconds(120); 
       t.initialize(); 
       configurer.setTaskExecutor(t); 
      } 
     }; 
    } 

} 
ここ

が読みよりです:

+0

これを実行します。 ありがとう:) –

+0

私は春のブートを使用していることを忘れてしまった。 私も自分の質問を更新しました。 –

+0

@ mumbo_s5これがあなたが必要としているものであることを確認してください – sebadagostino

関連する問題