| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 
 | import akka.actor.UntypedActor;import org.apache.commons.lang3.concurrent.BasicThreadFactory;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
 
 
 
 
 public class DeadLetterActor extends UntypedActor {
 
 private static int CLEAN_TIME = 5;
 private static int MAX_DEAD_LETTER = 1000;
 
 private static List<Object> deadLetterList = Collections.synchronizedList(new ArrayList());
 
 private static ScheduledExecutorService scheduledExecutorService =  new ScheduledThreadPoolExecutor(1,
 new BasicThreadFactory.Builder().namingPattern("dead-letter-schedule-pool-%d").daemon(true).build());
 
 static {
 scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
 @Override
 public void run() {
 deadLetterList.clear();
 }
 }, CLEAN_TIME, CLEAN_TIME, TimeUnit.MINUTES);
 }
 
 @Override
 public void onReceive(Object message) throws Throwable {
 addDeadLetter(message);
 }
 
 public static void addDeadLetter(Object message) {
 if (deadLetterList.size() < MAX_DEAD_LETTER) {
 deadLetterList.add(message);
 }
 }
 
 public static List<Object> getDeadLetter() {
 return deadLetterList;
 }
 
 }
 
 |