1 2 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; }
}
|