並行する単一のサービスを作成することをお勧めします。スレッドプールを使用して、到着時にジョブを送信できます。そうすれば、サービス全体に影響を与える長時間のジョブについて心配する必要がなくなります。
ただし、これは、さまざまな異なるサービスへの同時アクセスについて心配する必要があることを意味します。各サービスが一度に1つのトランザクションのみを処理する場合は、リクエストの種類ごとにサービスを作成する方が簡単な場合があります。
並行サービスを決定する場合、次のコードは、ExecutorService
スレッドプールを使用する方法の例です。
// create a thread pool with a dynamic number of workers
ExecutorService threadPool = Executors.newCachedThreadPool();
while (!shutdown) {
// read your SMS job into an object
SmsMessage message = receiveSmsMessage();
threadPool.submit(new SmsJob(message));
}
// once we have submitted all jobs to the thread pool, it should be shutdown
threadPool.shutdown();
...
public class SmsJob implements Runnable {
private SmsMessage message;
public MyJobProcessor(SmsMessage message) {
this.message = message;
}
public void run() {
// process the message
}
}