class AliyunIot::Queue

Attributes

name[R]

Public Class Methods

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

Public Instance Methods

batch_receive_message(num = 16, wait_seconds = 3) click to toggle source

批量消费消息

# File lib/aliyun_iot/queue.rb, line 72
def batch_receive_message(num = 16, wait_seconds = 3)
  result = Request::Xml.get(messages_path, query: {waitseconds: wait_seconds, numOfMessages: num})
  return nil if result.nil?
  Result.new(self, result, "Messages", "Message").get_message
end
create(opts = {}) click to toggle source

创建队列

# File lib/aliyun_iot/queue.rb, line 30
def create(opts = {})
  Request::Xml.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/aliyun_iot/queue.rb, line 49
def delete
  Request::Xml.delete queue_path
end
device_msg_path(device_name) click to toggle source
# File lib/aliyun_iot/queue.rb, line 107
def device_msg_path(device_name)
  "/#{pk}/#{device_name}/get"
end
messages_path() click to toggle source
# File lib/aliyun_iot/queue.rb, line 103
def messages_path
  "/queues/#{name}/messages"
end
peek() click to toggle source

查看消息

# File lib/aliyun_iot/queue.rb, line 44
def peek
  Request::Xml.get(messages_path, query: {peekonly: true})
end
queue_path() click to toggle source
# File lib/aliyun_iot/queue.rb, line 99
def queue_path
  "/queues/#{name}"
end
receive_message(wait_seconds = 3) click to toggle source

消费消息

# File lib/aliyun_iot/queue.rb, line 65
def receive_message(wait_seconds = 3)
  result = Request::Xml.get(messages_path, query: {waitseconds: wait_seconds})
  return nil if result.nil?
  Result.new(self, result).get_message
end
send_message(message, opts = {}) click to toggle source

发送消息

# File lib/aliyun_iot/queue.rb, line 54
def send_message(message, opts = {})
  Request::Xml.post(messages_path) do |request|
    msg_options = {
        :DelaySeconds => 0,
        :Priority => 8
    }.merge(opts)
    request.content(:Message, msg_options.merge(:MessageBody => message.to_s))
  end
end
set_attr(opts = {}) click to toggle source

设置队列属性

# File lib/aliyun_iot/queue.rb, line 79
def set_attr(opts = {})
  Request::Xml.put(queue_path, query: {Metaoverride: true}) do |request|
    request.content(:Queue, opts)
  end
end

Private Instance Methods

configuration() click to toggle source
# File lib/aliyun_iot/queue.rb, line 112
def configuration
  AliyunIot.configuration
end