在Rails项目中设置Shoryuken,Active Job和Amazon SQS

时间:2016-09-30 03:51:35

标签: ruby-on-rails amazon-sqs rails-activejob shoryuken

作为AWS的相对新手,根据设置文档,使Shoryuken gem(使用Active Job和Active Record)工作有点曲线。

  1. 中间件:我不确定中间件是否是设置的必要部分,因为它只是在基本示例中屈服。我的理解是正确的,如果您需要在从队列中提取消息之前或之后执行操作,这是有用的。

  2. Shoryuken插入但未从SQS获取消息:此时,Shoryuken正在向SQS队列发送消息,我可以在AWS控制台中看到消息(在消息中可见)但是即使队列中没有任何内容,Shoryuken也没有提取它们。

  3. 控制台

    irb(main):003:0> InvitationMailer.send_invite(ii).deliver_later
        Enqueued ActionMailer::DeliveryJob (Job ID: 5c65184c-8656-42bd-95ce-e0ded78a9a44) to Shoryuken(development_mailers) with arguments: "InvitationMailer", "send_invite", "deliver_now", gid://projectname/Invitation/25
        => #<ActionMailer::DeliveryJob:0x007f7fad761a40 @arguments=["InvitationMailer", "send_invite", "deliver_now", #<Invitation id: 25, invite_code: "324234325", sender_id: 7, invitee_first_name: "Kylo", invitee_last_name: "Ren", invitee_email: "test128@somewhere.com", status: "sent", joined_member_id: nil, created_at: "2016-09-24 03:14:44", updated_at: "2016-09-24 04:16:36", invite_message: nil, sent_at: nil, accepted_at: nil, completed_at: nil, clicked_at: nil, source: nil>], @job_id="5c65184c-8656-42bd-95ce-e0ded78a9a44", @queue_name="development_mailers">
    
    irb(main):004:0> Shoryuken.options
    => {:concurrency=>25, :queues=>[], :aws=>{}, :delay=>0, :timeout=>8, :lifecycle_events=>{:startup=>[], :quiet=>[], :shutdown=>[]}}
    irb(main):005:0>
    

    Shoryuken.yml

    aws:
      access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
      receive_message:
        attribute_names:
        - ApproximateReceiveCount
        - SentTimestamp
      region: <%= ENV['AWS_REGION'] %>
      secret_access_key:  <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
      concurrency: 25
      delay: 0
      queues:
        - development_mailers
    

    如何确定Shoryuken没有检索和处理消息的原因?

    (我发布了this issue to GitHub,但在没有收到回复后重新发布。

1 个答案:

答案 0 :(得分:0)

原来YAML格式不正确。 queues不应低于aws,而应位于同一级别。这是正确的版本:

aws:
  access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
  receive_message:
    attribute_names:
    - ApproximateReceiveCount
    - SentTimestamp
  region: <%= ENV['AWS_REGION'] %>
  secret_access_key:  <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
concurrency: 25
delay: 0
queues:
   - development_mailers