class AliMns::Queue

Attributes

name[R]

Public Class Methods

[](name) click to toggle source
# File lib/ali_mns/queue.rb, line 8
def [] name
  Queue.new(name)
end
new(name) click to toggle source
# File lib/ali_mns/queue.rb, line 20
def initialize name
  @name = name
end
queues(opts={}) click to toggle source
# File lib/ali_mns/queue.rb, line 12
def queues opts={}
  mns_options = {query: "x-mns-prefix", offset: "x-mns-marker", size: "x-mns-ret-number"}
  mns_headers = opts.slice(*mns_options.keys).reduce({}){|mns_headers, item| k, v = *item; mns_headers.merge!(mns_options[k]=>v)}
  response = Request.get("/", mns_headers: mns_headers)
  Hash.xml_array(response, "Queues", "Queue").collect{|item| Queue.new(URI(item["QueueURL"]).path.sub!(/^\//, ""))}
end

Public Instance Methods

batch_receive_message(limit: 16, wait_seconds: nil) click to toggle source

批量获取消息 本接口用于消费者批量消费队列的消息,一次BatchReceiveMessage操作最多可以获取16条消息。该操作会将取得的消息状态变成Inactive,Inactive的时间长度由Queue属性VisibilityTimeout指定(详见CreateQueue接口)。 消费者在VisibilityTimeout时间内消费成功后需要调用DeleteMessage接口删除取得的消息,否则取得的消息将会被重新置为Active,又可被消费者重新消费。

# File lib/ali_mns/queue.rb, line 56
def batch_receive_message limit: 16, wait_seconds: nil
  request_opts = {params:{numOfMessages: limit}}
  request_opts[:params].merge!({waitseconds: wait_seconds}) if wait_seconds
  
  return [] unless result = Request.get(messages_path, request_opts)
  BatchMessage.new(self, result)
end
create(opts={}) click to toggle source
# File lib/ali_mns/queue.rb, line 24
def create opts={}
  response = Request.put(queue_path) do |request|
    msg_options = {
      :VisibilityTimeout => 30,
      :DelaySeconds => 0,
      :MaximumMessageSize => 65536,
      :MessageRetentionPeriod => 345600,
      :PollingWaitSeconds => 0}.merge(opts)
    request.content :Queue, msg_options
  end
end
delete() click to toggle source
# File lib/ali_mns/queue.rb, line 36
def delete
  Request.delete(queue_path)
end
messages_path() click to toggle source
# File lib/ali_mns/queue.rb, line 73
def messages_path
  "/queues/#{name}/messages"
end
peek_message() click to toggle source
# File lib/ali_mns/queue.rb, line 64
def peek_message
  result = Request.get(messages_path, params: {peekonly: true})
  Message.new(self, result)
end
queue_path() click to toggle source
# File lib/ali_mns/queue.rb, line 69
def queue_path
  "/#{name}"
end
receive_message(wait_seconds: nil) click to toggle source
# File lib/ali_mns/queue.rb, line 47
def receive_message wait_seconds: nil
  request_opts = {}
  request_opts.merge!(params:{waitseconds: wait_seconds}) if wait_seconds
  return nil unless result = Request.get(messages_path, request_opts)
  Message.new(self, result)
end
send_message(message, opts={}) click to toggle source
# File lib/ali_mns/queue.rb, line 40
def send_message message, opts={}
  Request.post(messages_path) do |request|
    msg_options = {:DelaySeconds => 0, :Priority => 10}.merge(opts)
    request.content :Message, msg_options.merge(:MessageBody => message.to_s)
  end
end