2015-01-08 13 views
0

Jesque은 사용하기 좋은 도구입니다.Jesque (Resque) : redis db에 열려있는 모든 지연된 작업 가져 오기

Jesque는 Java에서 Resque를 구현 한 것입니다. Ruby 및 Node.js (Coffee-Resque) 구현과 완벽하게 상호 운용됩니다.

Jesque는 Maven 프로젝트이며 Jedis가 Redis에 연결하는 데 의존합니다. Jackson은 JSON과 매핑하고 JAF는 로깅을 위해 매핑합니다.

하지만 이전에는 더 많은 정보가 필요합니다. Jesque에서 열려있는 모든 작업을 검색 할 수도 있습니까? 이 정보는 내 모니터링 및 더티 다시 시작에 유용 할 수 있습니다. 더티 셧다운 후에 다른 응용 프로그램이 이미 완료되었거나 대기열에있는 경우 다른 모든 분산 응용 프로그램과 함께 나머지 작업을 모두 확인하는 것이 유용 할 수 있습니다. 이것이 가능한가? 로드 밸런서 뒤에 몇 가지 응용 프로그램이있을 수 있고 원래 클라이언트가 확인 또는 실패 피드백을받지 못하면 다시 시도하기 때문에 작업이 두 번 이상 수행되는 것을 피하기를 원합니다. 따라서 여러 개의 동일한 작업이 있습니다. 여러 단일 응용 프로그램 (loadbalancer !!!).

Java를 사용하므로 다른 redis db 클라이언트 도구를 사용하여 REDIS DB를 직접 볼 수도 있습니다. 이것은 jesque로 할 기회가 없다면 두 번째 옵션이 될 것입니다. 누구든지 Java 용 좋은 redis db 클라이언트를 알고 있습니까?

답변

0

필자는 마침내 작동해야하는 방식을 발견했으며 여기서 문서화하고 싶습니다. QueueInfoDAORedisImpl에 의해 구현 된 'QueueInfoDAO'인터페이스가 있습니다.

this.jedisPool = new JedisPool(jesqueConfig.getHost()); 
this.queueInfoDAORedisImpl = new net.greghaines.jesque.meta.dao.impl.QueueInfoDAORedisImpl(jesqueConfig, jedisPool); 
List<QueueInfo> queueInfos = queueInfoDAORedisImpl.getQueueInfos(); 

     for (QueueInfo queueInfo : queueInfos) { 
      //here are some QueueInfos like name or size 
      for (Job queuedJob : queueInfo.getJobs()) { 
       //read jobs arg,vars or do what you want 
      } 
     } 

유일한 문제는 해당 queueInfo.getJobs()가 null을 반환한다는 것입니다. 누군가 왜 그 이유를 알고 있습니까? DAO setJob()은 호출되지 않았으므로이 var은 null로 유지됩니다.

+0

또 다른 문제가 있습니다. 실행 후 모든 작업이 DB에 남아있는 것처럼 보입니다. 누구든지 실행 후 삭제할 수있는 방법을 알고 있습니까? – heaphach