looks really good. thanks for passing along.

On Tuesday, August 12, 2014 10:37:39 PM UTC-7, Will Sargent wrote:
>
> You should look at 
>
> http://typesafe.com/activator/template/akka-distributed-workers
>
> which uses akka persistence with a work-pulling master.
>
> Will Sargent
> Consultant, Professional Services
> Typesafe <http://typesafe.com>, the company behind Play Framework 
> <http://www.playframework.com>, Akka <http://akka.io> and Scala 
> <http://www.scala-lang.org/>
>  
>
> On Tue, Aug 12, 2014 at 3:46 PM, Greg Flanagan <[email protected] 
> <javascript:>> wrote:
>
>> I'm using the work pulling pattern and wanted to add persistence to the 
>> Master's work Queue state via akka persistence. I've come up with an 
>> approach and wanted to get feedback. 
>>
>> I'm using a muttable.Queue to store the current work and so I need to 
>> persist Enqueue and Dequeue events. The Enqueue event is straightforward, 
>> just add the work to the queue. However the Dequeue event feels a bit 
>> strange in my approach since I need to return the value of calling dequeue. 
>> To get around the fact that the function passed to persist has to return 
>> Unit I'm storing the the return value of dequeue in a var. Here is a code 
>> snippet: 
>>
>> class class Master[T] extends PersistentActor {
>>
>>   val persistenceId = "workpoolMaster"
>>   
>>   private val workers = Map.empty[ActorRef, Option[(ActorRef, T)]]
>>
>>   private val queue = Queue.empty[T]
>>
>>   private var work: Option[T] = None
>>   
>>   def enqueue(enqueue: Enqueue[T]) = queue += enqueue.work
>>   
>>   def dequeue(ignore: Dequeue) = {
>>     if (!queue.isEmpty) work = Some(queue.dequeue)
>>     else work = None
>>   }
>>
>>   val receiveRecover: Receive = {
>>     case work: Enqueue[T] => enqueue(work)
>>     case Dequeue => dequeue(Dequeue)
>>   } 
>>
>>   val receiveCommand: Receive = {
>>
>>     case work: Work[T] => {
>>       persist(Enqueue(work.work))(enqueue)
>>       notifyWorkers()
>>     }
>>
>>     case GimmeWork => {
>>       persist(Dequeue)(dequeue)
>>       work foreach { w => 
>>         workers += (sender -> Some(sender -> w))
>>         sender ! Work(w)
>>       }
>>     }
>>
>> ...
>>
>>
>>
>> Does this look like a reasonable approach? 
>>
>> Cheers,
>> Greg
>>
>>
>>  -- 
>> >>>>>>>>>> Read the docs: http://akka.io/docs/
>> >>>>>>>>>> Check the FAQ: 
>> http://doc.akka.io/docs/akka/current/additional/faq.html
>> >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Akka User List" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> Visit this group at http://groups.google.com/group/akka-user.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
>>>>>>>>>>      Read the docs: http://akka.io/docs/
>>>>>>>>>>      Check the FAQ: 
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>>      Search the archives: https://groups.google.com/group/akka-user
--- 
You received this message because you are subscribed to the Google Groups "Akka 
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to