Resque를 사용하여 백그라운드 작업 실행

3488 단어
백그라운드 미션이란?
기본적으로 프로그램은 코드에 따라 위에서 아래로 순서대로 실행되며, 앞의 작업이 완성되기 전에는 다음 작업이 시작되지 않습니다.이 원리를 바탕으로 사용자가 비교적 많은 시간을 소모하는 요청을 제출했을 때, 그는 임무가 완성된 후에야 다음 작업을 진행할 수 있다.이 과정에서 사용자는 기다리는 일을 하는 데 시간을 쓴다. 이것은 좋은 사용자 체험이 아니다. 그래서 우리는 프로그램을 이렇게 최적화할 수 있다. 사용자는 여전히 비교적 시간이 걸리는 임무를 제출하지만 우리의 프로그램은 즉각 응답할 수 있다. 동시에 사용자에게'당신이 나에게 준 임무는 내가 하고 있으니 다른 일을 하세요. 내가 다 한 다음에 알려 드릴게요'라고 말할 수 있다.이렇게 하면 사용자의 체험이 뚜렷하게 향상되고 Resque는 비슷한 작업을 하는 플러그인이다.
Resque란?
Resque는 Redis를 기반으로 하는 백엔드 작업 처리 플러그인입니다. Redis는 키-value 데이터 저장 엔진입니다. 백엔드 작업을 처리할 때 많은 작업을 동시에 할 수 있기 때문에 이 작업들은 Redis에 저장되어 '줄 서기' 를 하고 다음 작업을 결정합니다.따라서 Resque를 사용할 때 Redis 서비스를 시작해야 적용됩니다.
Redis 설치/시작
Redis 소스 코드 다운로드(https://github.com/defunkt/resque) 나중에 컴파일한 다음에maketest 명령이 있어 테스트를 할 수 있습니다. 저는 제 컴퓨터에서 테스트에 성공하지 못했지만 사용에 영향을 주지 않았기 때문에 당분간 깊이 연구하지 않았습니다.현재 Redis의 서버를 시작할 수 있는 두 가지 방법이 있습니다. 그 자체가 바이너리 파일이기 때문에 src 디렉터리에 들어가서 직접./redis-server 또는 make install 시스템을 불러온 후 redis-server 시작 서비스를 실행합니다.여기(https://github.com/ezmobius/redis-rb)의 README에는 Redis에 대한 간단한 사용 방법이 있습니다.
Resque 사용
우리는 백엔드 작업을 수행하는 코드를 퍼포먼스라는 방법에 넣고 이 방법이 있는class나module에 실례 변수를 정의해야 한다. 예는 다음과 같다.
1
2
3
4
5
6
7
class User
  @queue = :food

  def self.perform(name)
    puts "your name is #{name}"
  end
end

@queue 이 실례 변수를 주의해야 합니다. 이것은 없어서는 안 되고 이름이 고정되어 있습니다.현재 우리는 다음 명령을 실행하여 백엔드 감청 임무를 수행한다

rake resque:work QUEUE=food

이 QUEUE 값은 User의 @queue 값과 같습니다.
콘솔을 시작하고 이 방법을 사용하기 시작합니다
Resque.enqueue(User, 'ilstar')
이 때 라크를 실행하는 터미널에서 내용을 출력한 것을 발견할 수 있습니다.여기까지, 우리의 작은 실험은 이미 완성되었다.이 방법의 호출은 사실 비동기적으로 집행된 것이기 때문에 독자는 스스로 시간을 소모하는 방법을 추가하여 효과를 강화할 수 있다.
몇 가지 문제
* 이 과정에서 라크-T에 리퀘스트가 포함되지 않은 것을 발견할 수 있습니다. 방법은 다음과 같습니다.
1
2
3
4
# in lib/tasks/resque.rake
require 'resque/tasks'

task "resque:setup" => :environment

* 라크를 실행할 때 시스템 Timer 이gem이 필요하다는 것을 알려주고 추가하면 됩니다.
*perform 방법은 유형 방법(이 명칭은 정확하지 않다. 왜냐하면 이 방법은class나module에 놓을 수 있기 때문에 방법 앞에self.를 붙이면 된다)
*여기 왜 레드리스-rb가 있어요?Redis는 C 언어로 작성된 라이브러리이고 우리가 사용하는 언어는 Ruby이기 때문에 Redis를 더욱 쉽게 사용할 수 있도록 존재하는 것이다.
* Resque 적용에 필요한 조건: redis-server를 시작하고 rake resque:work 또는 resque:workers 스니핑을 실행합니다.
다음으로 이동:http://ilstar.blogbus.com/logs/106078692.html

좋은 웹페이지 즐겨찾기