2010-01-05 19 views
5

Tôi đang làm việc trên một ứng dụng Rails nơi hoàn trả khách hàng được giao cho một công nhân Sweatshop. Nếu khoản tiền hoàn lại không thành công (vì chúng tôi không thể liên lạc với bộ phận xử lý thanh toán tại thời điểm đó), tôi muốn thực hiện lại công việc.requeue một công việc buôn bán tại RabbitMQ

class RefundWorker < Sweatshop::Worker 

def process_refund(job) 
    if refund 
    Transaction.find(job[:transaction]).update_attributes(:status => 'completed') 
    else 
    sleep 3 
    RefundWorker.async_process_refund(job) # requeue the job 
    end 
end 

Có cách nào tốt hơn để thực hiện điều này không? Tôi đã không tìm thấy bất kỳ "chậm trễ" tính năng trong RabbitMQ, và đây là giải pháp tốt nhất tôi đã đưa ra cho đến nay. Tôi muốn tránh một vòng lặp bận rộn trong khi requeueing.

Trả lời

0

Nó không có vẻ như AMQP (hoặc ít nhất RabbitMQ) ủng hộ ý tưởng "trì hoãn công việc này." Vì vậy, cách tiếp cận để xếp hàng lại cùng một công việc từ bên trong công nhân nếu nó không có vẻ là giải pháp tốt nhất vào lúc này.

Tôi có mã hoạt động trong môi trường trình diễn và đáp ứng nhu cầu của tôi cho đến thời điểm này.

1

Có dịch vụ chuyển phát theo thời gian? Bạn sẽ gửi tin nhắn để phân phối dưới dạng tải trọng, được gói với thời gian giao hàng và dịch vụ sẽ giữ lại tin nhắn cho đến khi đạt đến thời gian đã chỉ định. Không có gì giống như vậy tồn tại trong máy chủ RabbitMQ hoặc bất kỳ thư viện máy khách AMQP nào, theo như tôi biết, nhưng nó sẽ là một điều hữu ích để có.

+0

cần tây làm điều này cho các tác vụ với eta/đếm ngược. Nó chỉ giữ các thông báo, và có một trình lập lịch biểu thực hiện các nhiệm vụ khi eta được đáp ứng. Vì các thông báo cần được thừa nhận, việc giữ chúng không phải là vấn đề, mặc dù nó khá kỳ quặc khi sử dụng số lượng tìm nạp QoS, vì chúng ta phải tăng số lần tìm nạp trước mỗi khi nhận được một tin nhắn với eta và giảm khi thông điệp eta đã được xử lý. – asksol

3

Bạn đã xem những thứ như Ruote và Minion chưa?

Một số liên kết ở đây: http://delicious.com/alexisrichardson/rabbitmq+work+ruby

Bạn cũng có thể thử Cần tây mà không nói mẹ đẻ Ruby nhưng không nói HTTP + JSON.

Tất cả công việc trên với RabbitMQ, vì vậy có thể giúp bạn.

Cheers

alexis

+0

Cảm ơn bạn đã thay thế khách hàng. Tôi thực sự khá gắn bó với Ruby bất cứ khi nào có thể và Sweatshop/Carrot đã hoạt động rất tốt. Họ không có vẻ là một chức năng chậm trễ trong AMQP, do đó, hàng đợi lại có vẻ là lựa chọn tốt nhất vào thời điểm này. Tôi có mã trong phát triển làm việc như tôi muốn, chỉ cần tự hỏi nếu không có một cách tốt hơn. –

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