Study
Akka

Error Handling & Dead Letter

Penjelasan

Dead letter adalah mekanisme Akka untuk menampung pesan yang tidak bisa dikirimkan ke tujuannya — misalnya karena actor tujuan sudah berhenti (stopped) sebelum pesan sempat diproses, atau `ActorRef` yang dipakai sudah tidak valid lagi. Alih-alih pesan tersebut hilang begitu saja tanpa jejak, Akka mengarahkannya ke sistem 'dead letters' khusus yang tercatat di log dengan level warning, sehingga developer bisa menyadari ada komunikasi yang gagal. Ini penting untuk debugging sistem konkuren, karena race condition antara pengiriman pesan dan penghentian actor adalah hal yang lumrah terjadi dalam sistem terdistribusi. Selain memantau log dead letter secara manual, kita juga bisa subscribe secara programatik ke event dead letter lewat EventStream (`context.system.eventStream.subscribe`) untuk membangun monitoring atau alerting kustom. Prinsip desain yang baik untuk meminimalkan dead letter: hindari mengirim pesan ke ActorRef yang disimpan terlalu lama tanpa verifikasi actor tersebut masih hidup (gunakan watch/Terminated seperti dibahas di topik lifecycle), dan pertimbangkan pola acknowledgment untuk pesan yang benar-benar kritikal harus sampai.

Contoh Konsep

import akka.actor.typed.{ActorSystem, Behavior}
import akka.actor.typed.scaladsl.Behaviors
import akka.actor.DeadLetter

object Sementara {
  sealed trait Pesan
  case object Halo extends Pesan

  def apply(): Behavior[Pesan] = Behaviors.receiveMessage {
    case Halo => Behaviors.stopped // langsung berhenti setelah 1 pesan
  }
}

object ContohDeadLetter extends App {
  val system = ActorSystem(Sementara(), "sistem-deadletter")

  system ! Sementara.Halo
  Thread.sleep(500)
  system ! Sementara.Halo // actor sudah stopped, pesan ini akan jadi dead letter
}

Praktikum

Tulis penjelasan komentar mengapa pesan kedua yang dikirim setelah actor Sementara berhenti akan berakhir sebagai dead letter, dan sebutkan satu cara mencegah situasi ini terjadi tanpa sengaja di aplikasi nyata.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Dead letter yang muncul sesekali saat shutdown aplikasi biasanya normal dan bisa diabaikan, tapi dead letter yang muncul terus-menerus saat aplikasi berjalan normal adalah tanda bug nyata (misal referensi actor basi) yang wajib diselidiki, bukan diabaikan begitu saja.