Class: AliyunIot::Queue

Inherits:
Object
  • Object
show all
Defined in:
lib/aliyun_iot/queue.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Queue

Returns a new instance of Queue.



24
25
26
27
# File 'lib/aliyun_iot/queue.rb', line 24

def initialize(name)
  @name = name
  @pk = product_key
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



6
7
8
# File 'lib/aliyun_iot/queue.rb', line 6

def name
  @name
end

Class Method Details

.[](name) ⇒ Object



12
13
14
# File 'lib/aliyun_iot/queue.rb', line 12

def [](name)
  Queue.new(name)
end

.queues(opts = {}) ⇒ Object



16
17
18
19
20
21
# 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: mqs_headers.merge({"x-mns-version" => "2015-06-06"}))
  Hash.xml_array(response, "Queues", "Queue").collect { |item| Queue.new(URI(item["QueueURL"]).path.sub!(/^\/queues\//, "")) }
end

Instance Method Details

#create(opts = {}) ⇒ Object

创建队列



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/aliyun_iot/queue.rb', line 30

def create(opts = {})
  Request::Xml.put(queue_path, mqs_headers: {"x-mns-version" => "2015-06-06"}) do |request|
    msg_options = {
        :VisibilityTimeout => 30,
        :DelaySeconds => 0,
        :MaximumMessageSize => 65536,
        :MessageRetentionPeriod => 345600,
        :PollingWaitSeconds => 0
    }.merge(opts)
    request.content_xml(:Queue, msg_options)
  end
end

#deleteObject

删除队列



44
45
46
# File 'lib/aliyun_iot/queue.rb', line 44

def delete
  Request::Xml.delete(queue_path, mqs_headers: {"x-mns-version" => "2015-06-06"})
end

#device_msg_path(device_name) ⇒ Object



76
77
78
# File 'lib/aliyun_iot/queue.rb', line 76

def device_msg_path(device_name)
  "/#{pk}/#{device_name}/get"
end

#messages_pathObject



72
73
74
# File 'lib/aliyun_iot/queue.rb', line 72

def messages_path
  "/queues/#{name}/messages"
end

#queue_pathObject



68
69
70
# File 'lib/aliyun_iot/queue.rb', line 68

def queue_path
  "/queues/#{name}"
end

#receive_message(wait_seconds = nil) ⇒ Object

消费消息



60
61
62
63
64
65
66
# File 'lib/aliyun_iot/queue.rb', line 60

def receive_message(wait_seconds = nil)
  request_opts = {mqs_headers: {"x-mns-version" => "2015-06-06"}}
  request_opts.merge!(query: {waitseconds: wait_seconds}) if wait_seconds
  result = Request::Xml.get(messages_path, request_opts)
  return nil if result.nil?
  Message.new(self, result)
end

#send_message(message, opts = {}) ⇒ Object

发送消息



49
50
51
52
53
54
55
56
57
# File 'lib/aliyun_iot/queue.rb', line 49

def send_message(message, opts = {})
  Request::Xml.post(messages_path, mqs_headers: {"x-mns-version" => "2015-06-06"}) do |request|
    msg_options = {
        :DelaySeconds => 0,
        :Priority => 8
    }.merge(opts)
    request.content_xml(:Message, msg_options.merge(:MessageBody => message.to_s))
  end
end