public class Worker extends AbstractActor {
private final PriorityQueue<Task> taskQueue = new PriorityQueue<>();
@Override
public Receive createReceive() {
return receiveBuilder()
.match(Task.class, this::handleTask)
.build();
}
private void handleTask(Task task) {
taskQueue.offer(task);
Task nextTask = taskQueue.poll();
if (nextTask != null) {
System.out.println("Executing task: " + nextTask);
}
}
}
public class WorkerTest {
@Test
public void testWorkerConcurrency() {
ActorSystem system = ActorSystem.create();
ActorRef worker = system.actorOf(Props.create(Worker.class));
TestProbe probe = TestProbe.create(system);
probe.send(worker, new Worker.Task("Task 1", 2));
probe.send(worker, new Worker.Task("Task 2", 1));
probe.send(worker, new Worker.Task("Task 3", 3));
probe.expectNoMessage(Duration.ofSeconds(10));
}
}