2012-05-26 3 views
4

대부분의 작업은 네트워크에 따라 다르므로 한 번에 하나의 메시지가 아닌 병렬로 큐를 처리하려고합니다. 내 프리 페치 설정을 사용하지 않는 이유는루비 + AMQP : 병렬 처리 큐

#!/usr/bin/env ruby 
# encoding: utf-8 

require "rubygems" 
require 'amqp' 

EventMachine.run do 
    connection = AMQP.connect(:host => '127.0.0.1') 

    channel = AMQP::Channel.new(connection) 
    channel.prefetch 5 

    queue = channel.queue("pending_checks", :durable => true) 
    exchange = channel.direct('', :durable => true) 

    queue.subscribe(:ack => true) do |metadata, payload| 
    time = rand(3..9) 
    puts 'waiting ' + time.to_s + ' for message ' + payload 
    sleep(time) 

    puts 'done with '+ payoad 

    metadata.ack 
    end 
end 

:

그래서, 나는 다음과 같은 코드를 사용하고 있습니다? 나는 그것이 5 개의 메시지를 얻고 병렬로 처리해야한다고 생각한다.

+0

페르난도 (블로거에 Google 그룹스에 마이클 Klishin에서 정보와의 Stoyan 주셔서 감사합니다) 아래 joelparkerhenderson의 대답이 유용하다고 생각합니다. 문제 해결에 도움이 되었습니까? 어느 쪽이든 저희에게 알려주십시오. –

답변

2

Prefetch는 확인하기 전에 미리 보낼 수있는 최대 메시지 수입니다.

즉, 프리 페치 크기는 단일 메시지의 클라이언트로의 전송을 제한하지 않고 클라이언트가 아직 하나 이상의 응답되지 않은 메시지를 가지고있을 때 더 많은 메시지를 보내기 전에 만 전송합니다. (AMPQ 워드 프로세서에서)

QoS Prefetching Messages

RabbitMQ AMQP Reference

EventMachine 기반 단일 스레드 및 이벤트이다. 다른 스레드 또는 프로세스의 병렬 작업에 대해서는 EM :: 지연 가능, 스레드 또는 스폰를 참조하십시오.

는 또한 핫 토끼의 RabbitMQ 자바 클라이언트의 상단에 빠른 DSL을 참조하십시오

https://github.com/ruby-amqp/hot_bunnies

+0

그리고 Ruby amqp가 대기열 작업을 병렬로 처리하는 방법을 알고 있습니까? – Fernando

+0

처리 병렬 처리 방법에 대한 답변이 업데이트되었습니다. – joelparkerhenderson