2013-11-01 18 views
7

Tôi đang cố gắng sử dụng bộ lập lịch-thạch anh-akka để kích hoạt sự kiện dọn dẹp trong các khoảng thời gian đều đặn. Tôi nhận được lịch trình để gửi tin nhắn cho các diễn viên, nhưng chỉ khi không có lịch liên kết với lịch trình. Bất cứ khi nào tôi đính kèm lịch vào lịch biểu, diễn viên không bao giờ nhận được bất kỳ tin nhắn nào.Trình lên lịch thạch anh Akka không bao giờ kích hoạt diễn viên của tôi

Đây là phần ứng dụng.conf có liên quan đến bộ lập lịch-thạch anh-akka. Nếu tôi loại bỏ các dòng

lịch = [ "Minimal"]"

từ cấu hình, diễn viên của tôi được kích hoạt. Nếu tôi rời khỏi dòng trong, không có diễn viên được gọi.

akka { 
    quartz { 
     defaultTimezone = "Europe/Oslo" 
     schedules { 
      NowAndThen { 
       description ="Delete temp files now and then, eg every hour" 
       expression = "*/10 * * * * ?" 
       calendars = ["Minimal"] 
      } 
     } 
     calendars { 

      Minimal { 
       type = Daily 
       exclude { 
        startTime = "15:00" 
        endTime = "15:01" 
       } 
      } 

     } 
    } 
} 

tôi đang khởi tạo phần mở rộng từ một ứng dụng play framework, trong Global.java:

import akka.actor.ActorRef; 
import akka.actor.ActorSystem; 
import akka.actor.Extension; 
import akka.actor.Props; 
import com.typesafe.akka.extension.quartz.QuartzSchedulerExtension; 
import play.Application; 
import play.GlobalSettings; 
import play.Logger; 
import play.libs.Akka; 
import uttrekk.CleanupRunner; 

public class Global extends GlobalSettings { 

    public void onStart(Application app) { 
    AkkaStartUp.startup(app); 
    } 

    static class AkkaStartUp { 

    public static void startup(Application app) { 
     // Starter autoamtiske avelveringer norges eiendommer 
     ActorSystem system = Akka.system(); 

     ActorRef cleanupRef =system.actorOf(new Props(CleanupRunner.class)); 

    QuartzSchedulerExtension scheduler = (QuartzSchedulerExtension) QuartzSchedulerExtension.get(system); 
    scheduler.schedule("NowAndThen",cleanupRef,"Clean"); 

    } 
    } 
} 

việc thực hiện diễn viên trông giống như sau:

package uttrekk; 

import akka.actor.UntypedActor; 
import play.Logger; 
import util.NewProperties; 

import java.io.File; 
import java.io.FilenameFilter; 

public class CleanupRunner extends UntypedActor { 

    @Override 
    public void onReceive(Object message) throws Exception { 
    Logger.info("Running cleanup of temporary files"); 
    } 
} 
+0

Bạn đã tìm thấy giải pháp cho điều này chưa? Tôi có cùng một vấn đề. – Frane

Trả lời

2

sự cố xảy ra trong quá trình khởi tạo lịch. Kiểm tra dòng 245 trong lớp QuartzSchedulerExtension: scheduler.addCalendar (name.toUpperCase, lịch, đúng, true)

Lịch được thêm vào sử dụng chữ hoa, vì vậy thạch anh không bao giờ tìm thấy nó, sản xuất mà không có việc làm được kích hoạt sau đó. Nếu bạn định nghĩa lịch của mình trong cấu hình akka bằng cách sử dụng tên UpperCase, nó sẽ hoạt động.

+0

Không bao giờ hiểu được sự cần thiết phải ưu tiên, nhưng đó là cách nó được. Xin lỗi vì sự chậm trễ lâu dài của việc chấp nhận câu trả lời :) –

Các vấn đề liên quan