Struktur data Scala untuk menghapus duplikat pekerjaan yang dilakukan oleh akka

Saya ingin menerapkan struktur data dalam scala yang memungkinkan saya menghapus duplikat pekerjaan yang dilakukan oleh program saya. Program ini dibangun di atas kerangka akka-scala.

Setiap kali saya menerima pesan di pekerja saya, saya akan memeriksa struktur data ini untuk mengetahui apa yang sedang diproses. Jika jenis pesan seperti itu sudah dalam proses, saya tinggal menyimpannya di struktur data tersebut dan menunggu hasil diproses. Ketika hasil yang diproses tiba, saya akan mengirimkan pemberitahuan untuk semua pesan tersimpan jenis ini, dan menghapusnya dari struktur

Jika jenis pesan tersebut tidak ditemukan dalam struktur data ini, saya akan menyimpannya di sana dan mulai memproses.

Sejauh ini saya memikirkan sesuatu seperti mutable.Map[Long, Seq[ETLMessageMeta]]

Apakah ada yang lebih baik untuk tugas seperti itu?


person Vasily802    schedule 21.09.2017    source sumber


Jawaban (1)


Jika setiap unit kerja dapat diidentifikasi secara unik, maka Map sepertinya cocok. Namun, alih-alih menggunakan mutable.Map, gunakan immutable.Map yaitu var, untuk membantu memastikan bahwa keadaan yang bisa berubah ini tidak bocor ke luar aktor pekerja. Misalnya:

class Worker extends Actor {
  var inProgress = immutable.Map[Long, Seq[ETLMessageMeta]]()

  def receive = ???
}
person Jeffrey Chung    schedule 21.09.2017