rabbitmq 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/ext/rabbitmq/Rakefile +14 -9
- data/lib/rabbitmq/connection/channel_manager.rb +61 -0
- data/lib/rabbitmq/connection/event_manager.rb +55 -0
- data/lib/rabbitmq/connection/transport.rb +157 -0
- data/lib/rabbitmq/ffi.rb +4 -356
- data/lib/rabbitmq/ffi/ext.rb +12 -299
- data/lib/rabbitmq/ffi/ext/basic_properties.rb +57 -0
- data/lib/rabbitmq/ffi/ext/bytes.rb +29 -0
- data/lib/rabbitmq/ffi/ext/connection_info.rb +12 -0
- data/lib/rabbitmq/ffi/ext/field_value.rb +49 -0
- data/lib/rabbitmq/ffi/ext/frame.rb +43 -0
- data/lib/rabbitmq/ffi/ext/frame_payload_properties.rb +12 -0
- data/lib/rabbitmq/ffi/ext/method.rb +49 -0
- data/lib/rabbitmq/ffi/ext/table.rb +51 -0
- data/lib/rabbitmq/ffi/ext/timeval.rb +18 -0
- data/lib/rabbitmq/ffi/gen.rb +65 -0
- data/lib/rabbitmq/ffi/gen/access_request.rb +49 -0
- data/lib/rabbitmq/ffi/gen/access_request_ok.rb +29 -0
- data/lib/rabbitmq/ffi/gen/basic_ack.rb +36 -0
- data/lib/rabbitmq/ffi/gen/basic_cancel.rb +37 -0
- data/lib/rabbitmq/ffi/gen/basic_cancel_ok.rb +30 -0
- data/lib/rabbitmq/ffi/gen/basic_consume.rb +57 -0
- data/lib/rabbitmq/ffi/gen/basic_consume_ok.rb +30 -0
- data/lib/rabbitmq/ffi/gen/basic_deliver.rb +48 -0
- data/lib/rabbitmq/ffi/gen/basic_get.rb +40 -0
- data/lib/rabbitmq/ffi/gen/basic_get_empty.rb +30 -0
- data/lib/rabbitmq/ffi/gen/basic_get_ok.rb +47 -0
- data/lib/rabbitmq/ffi/gen/basic_nack.rb +39 -0
- data/lib/rabbitmq/ffi/gen/basic_publish.rb +47 -0
- data/lib/rabbitmq/ffi/gen/basic_qos.rb +39 -0
- data/lib/rabbitmq/ffi/gen/basic_qos_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/basic_recover.rb +29 -0
- data/lib/rabbitmq/ffi/gen/basic_recover_async.rb +29 -0
- data/lib/rabbitmq/ffi/gen/basic_recover_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/basic_reject.rb +36 -0
- data/lib/rabbitmq/ffi/gen/basic_return.rb +45 -0
- data/lib/rabbitmq/ffi/gen/channel_close.rb +45 -0
- data/lib/rabbitmq/ffi/gen/channel_close_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/channel_flow.rb +29 -0
- data/lib/rabbitmq/ffi/gen/channel_flow_ok.rb +29 -0
- data/lib/rabbitmq/ffi/gen/channel_open.rb +30 -0
- data/lib/rabbitmq/ffi/gen/channel_open_ok.rb +30 -0
- data/lib/rabbitmq/ffi/gen/confirm_select.rb +29 -0
- data/lib/rabbitmq/ffi/gen/confirm_select_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/connection_blocked.rb +30 -0
- data/lib/rabbitmq/ffi/gen/connection_close.rb +45 -0
- data/lib/rabbitmq/ffi/gen/connection_close_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/connection_open.rb +41 -0
- data/lib/rabbitmq/ffi/gen/connection_open_ok.rb +30 -0
- data/lib/rabbitmq/ffi/gen/connection_secure.rb +30 -0
- data/lib/rabbitmq/ffi/gen/connection_secure_ok.rb +30 -0
- data/lib/rabbitmq/ffi/gen/connection_start.rb +48 -0
- data/lib/rabbitmq/ffi/gen/connection_start_ok.rb +46 -0
- data/lib/rabbitmq/ffi/gen/connection_tune.rb +39 -0
- data/lib/rabbitmq/ffi/gen/connection_tune_ok.rb +39 -0
- data/lib/rabbitmq/ffi/gen/connection_unblocked.rb +28 -0
- data/lib/rabbitmq/ffi/gen/exchange_bind.rb +52 -0
- data/lib/rabbitmq/ffi/gen/exchange_bind_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/exchange_declare.rb +60 -0
- data/lib/rabbitmq/ffi/gen/exchange_declare_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/exchange_delete.rb +43 -0
- data/lib/rabbitmq/ffi/gen/exchange_delete_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/exchange_unbind.rb +52 -0
- data/lib/rabbitmq/ffi/gen/exchange_unbind_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/queue_bind.rb +52 -0
- data/lib/rabbitmq/ffi/gen/queue_bind_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/queue_declare.rb +56 -0
- data/lib/rabbitmq/ffi/gen/queue_declare_ok.rb +40 -0
- data/lib/rabbitmq/ffi/gen/queue_delete.rb +46 -0
- data/lib/rabbitmq/ffi/gen/queue_delete_ok.rb +29 -0
- data/lib/rabbitmq/ffi/gen/queue_purge.rb +40 -0
- data/lib/rabbitmq/ffi/gen/queue_purge_ok.rb +29 -0
- data/lib/rabbitmq/ffi/gen/queue_unbind.rb +49 -0
- data/lib/rabbitmq/ffi/gen/queue_unbind_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/tx_commit.rb +28 -0
- data/lib/rabbitmq/ffi/gen/tx_commit_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/tx_rollback.rb +28 -0
- data/lib/rabbitmq/ffi/gen/tx_rollback_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/tx_select.rb +28 -0
- data/lib/rabbitmq/ffi/gen/tx_select_ok.rb +28 -0
- metadata +79 -2
@@ -0,0 +1,43 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
|
5
|
+
class Frame
|
6
|
+
def payload
|
7
|
+
member = case self[:frame_type]
|
8
|
+
when :method; :method
|
9
|
+
when :header; :properties
|
10
|
+
when :body; :body_fragment
|
11
|
+
else; raise NotImplementedError, "frame type: #{self[:frame_type]}"
|
12
|
+
end
|
13
|
+
self[:payload][member]
|
14
|
+
end
|
15
|
+
|
16
|
+
def as_method_to_h(free=false)
|
17
|
+
# TODO: raise correct error class with enough info for appropriate action
|
18
|
+
raise "Wrong frame type for method frame of event: #{self[:frame_type]}" \
|
19
|
+
unless self[:frame_type] == :method
|
20
|
+
|
21
|
+
payload.to_h(free).merge(channel: self[:channel])
|
22
|
+
end
|
23
|
+
|
24
|
+
def as_header_to_h(free=false)
|
25
|
+
# TODO: raise correct error class with enough info for appropriate action
|
26
|
+
raise "Wrong frame type for header frame of multiframe event: #{self[:frame_type]}" \
|
27
|
+
unless self[:frame_type] == :header
|
28
|
+
|
29
|
+
properties = self[:payload][:properties]
|
30
|
+
{ header: properties.decoded.to_h(free), body_size: properties[:body_size] }
|
31
|
+
end
|
32
|
+
|
33
|
+
def as_body_to_s(free=false)
|
34
|
+
# TODO: raise correct error class with enough info for appropriate action
|
35
|
+
raise "Wrong frame type for body frame of multiframe event: #{self[:frame_type]}" \
|
36
|
+
unless self[:frame_type] == :body
|
37
|
+
|
38
|
+
self[:payload][:body_fragment].to_s(free)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
|
5
|
+
class Method
|
6
|
+
MethodClasses = FFI::MethodNumber.symbols.map do |name|
|
7
|
+
const_name = name.to_s.gsub(/((?:\A\w)|(?:_\w))/) { |x| x[-1].upcase }
|
8
|
+
[name, FFI.const_get(const_name)]
|
9
|
+
end.to_h.freeze
|
10
|
+
|
11
|
+
MethodNames = MethodClasses.to_a.map(&:reverse).to_h.freeze
|
12
|
+
|
13
|
+
def to_h(free=false)
|
14
|
+
{ method: self[:id],
|
15
|
+
properties: self.decoded.to_h(free) }
|
16
|
+
end
|
17
|
+
|
18
|
+
def decoded
|
19
|
+
MethodClasses.fetch(self[:id]).new(self[:decoded])
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.lookup(kls)
|
23
|
+
MethodNames.fetch(kls)
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.lookup_class(name)
|
27
|
+
MethodClasses.fetch(name)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.from(decoded)
|
31
|
+
obj = new
|
32
|
+
obj[:id] = lookup(decoded.class)
|
33
|
+
obj[:decoded] = decoded.pointer
|
34
|
+
obj
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.has_content?(type)
|
38
|
+
case type
|
39
|
+
when :basic_publish; true
|
40
|
+
when :basic_return; true
|
41
|
+
when :basic_deliver; true
|
42
|
+
when :basic_get_ok; true
|
43
|
+
else false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
|
5
|
+
class Table
|
6
|
+
include Enumerable
|
7
|
+
|
8
|
+
def each(*a, &b)
|
9
|
+
entry_ptr = self[:entries]
|
10
|
+
entries = self[:num_entries].times.map do |i|
|
11
|
+
FFI::TableEntry.new(entry_ptr + i * FFI::TableEntry.size)
|
12
|
+
end
|
13
|
+
entries.each(*a, &b)
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_h(free=false)
|
17
|
+
result = self.map do |entry|
|
18
|
+
[entry[:key].to_s(free), entry[:value].to_value(free)]
|
19
|
+
end.to_h
|
20
|
+
|
21
|
+
clear if free
|
22
|
+
result
|
23
|
+
end
|
24
|
+
|
25
|
+
def free!
|
26
|
+
self.each do
|
27
|
+
entry[:key].free!
|
28
|
+
entry[:value].free!
|
29
|
+
end
|
30
|
+
FFI.free(self[:entries])
|
31
|
+
clear
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.from(params)
|
35
|
+
size = params.size
|
36
|
+
entry_ptr = Util.mem_ptr(size * FFI::TableEntry.size, release: false)
|
37
|
+
params.each_with_index do |param, idx|
|
38
|
+
entry = FFI::TableEntry.new(entry_ptr + idx * FFI::TableEntry.size)
|
39
|
+
entry[:key] = FFI::Bytes.from_s(param.first.to_s)
|
40
|
+
entry[:value] = FFI::FieldValue.from(param.last)
|
41
|
+
end
|
42
|
+
|
43
|
+
obj = new
|
44
|
+
obj[:num_entries] = size
|
45
|
+
obj[:entries] = entry_ptr
|
46
|
+
obj
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
|
5
|
+
class Timeval
|
6
|
+
def self.from(seconds)
|
7
|
+
obj = new
|
8
|
+
obj[:tv_sec] = Integer(seconds)
|
9
|
+
obj[:tv_usec] = Integer(Float(seconds) * 1_000_000)
|
10
|
+
obj
|
11
|
+
end
|
12
|
+
|
13
|
+
@zero = self.from(0)
|
14
|
+
class << self; attr_reader :zero; end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
|
2
|
+
require_relative 'gen/connection_start'
|
3
|
+
require_relative 'gen/connection_start_ok'
|
4
|
+
require_relative 'gen/connection_secure'
|
5
|
+
require_relative 'gen/connection_secure_ok'
|
6
|
+
require_relative 'gen/connection_tune'
|
7
|
+
require_relative 'gen/connection_tune_ok'
|
8
|
+
require_relative 'gen/connection_open'
|
9
|
+
require_relative 'gen/connection_open_ok'
|
10
|
+
require_relative 'gen/connection_close'
|
11
|
+
require_relative 'gen/connection_close_ok'
|
12
|
+
require_relative 'gen/connection_blocked'
|
13
|
+
require_relative 'gen/connection_unblocked'
|
14
|
+
require_relative 'gen/channel_open'
|
15
|
+
require_relative 'gen/channel_open_ok'
|
16
|
+
require_relative 'gen/channel_flow'
|
17
|
+
require_relative 'gen/channel_flow_ok'
|
18
|
+
require_relative 'gen/channel_close'
|
19
|
+
require_relative 'gen/channel_close_ok'
|
20
|
+
require_relative 'gen/access_request'
|
21
|
+
require_relative 'gen/access_request_ok'
|
22
|
+
require_relative 'gen/exchange_declare'
|
23
|
+
require_relative 'gen/exchange_declare_ok'
|
24
|
+
require_relative 'gen/exchange_delete'
|
25
|
+
require_relative 'gen/exchange_delete_ok'
|
26
|
+
require_relative 'gen/exchange_bind'
|
27
|
+
require_relative 'gen/exchange_bind_ok'
|
28
|
+
require_relative 'gen/exchange_unbind'
|
29
|
+
require_relative 'gen/exchange_unbind_ok'
|
30
|
+
require_relative 'gen/queue_declare'
|
31
|
+
require_relative 'gen/queue_declare_ok'
|
32
|
+
require_relative 'gen/queue_bind'
|
33
|
+
require_relative 'gen/queue_bind_ok'
|
34
|
+
require_relative 'gen/queue_purge'
|
35
|
+
require_relative 'gen/queue_purge_ok'
|
36
|
+
require_relative 'gen/queue_delete'
|
37
|
+
require_relative 'gen/queue_delete_ok'
|
38
|
+
require_relative 'gen/queue_unbind'
|
39
|
+
require_relative 'gen/queue_unbind_ok'
|
40
|
+
require_relative 'gen/basic_qos'
|
41
|
+
require_relative 'gen/basic_qos_ok'
|
42
|
+
require_relative 'gen/basic_consume'
|
43
|
+
require_relative 'gen/basic_consume_ok'
|
44
|
+
require_relative 'gen/basic_cancel'
|
45
|
+
require_relative 'gen/basic_cancel_ok'
|
46
|
+
require_relative 'gen/basic_publish'
|
47
|
+
require_relative 'gen/basic_return'
|
48
|
+
require_relative 'gen/basic_deliver'
|
49
|
+
require_relative 'gen/basic_get'
|
50
|
+
require_relative 'gen/basic_get_ok'
|
51
|
+
require_relative 'gen/basic_get_empty'
|
52
|
+
require_relative 'gen/basic_ack'
|
53
|
+
require_relative 'gen/basic_reject'
|
54
|
+
require_relative 'gen/basic_recover_async'
|
55
|
+
require_relative 'gen/basic_recover'
|
56
|
+
require_relative 'gen/basic_recover_ok'
|
57
|
+
require_relative 'gen/basic_nack'
|
58
|
+
require_relative 'gen/tx_select'
|
59
|
+
require_relative 'gen/tx_select_ok'
|
60
|
+
require_relative 'gen/tx_commit'
|
61
|
+
require_relative 'gen/tx_commit_ok'
|
62
|
+
require_relative 'gen/tx_rollback'
|
63
|
+
require_relative 'gen/tx_rollback_ok'
|
64
|
+
require_relative 'gen/confirm_select'
|
65
|
+
require_relative 'gen/confirm_select_ok'
|
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
class AccessRequest < ::FFI::Struct
|
5
|
+
layout(
|
6
|
+
:realm, Bytes,
|
7
|
+
:exclusive, Boolean,
|
8
|
+
:passive, Boolean,
|
9
|
+
:active, Boolean,
|
10
|
+
:write, Boolean,
|
11
|
+
:read, Boolean
|
12
|
+
)
|
13
|
+
|
14
|
+
def self.id
|
15
|
+
:access_request
|
16
|
+
end
|
17
|
+
|
18
|
+
def id
|
19
|
+
:access_request
|
20
|
+
end
|
21
|
+
|
22
|
+
def apply(realm: nil, exclusive: nil, passive: nil, active: nil, write: nil, read: nil)
|
23
|
+
self[:realm] = Bytes.from_s(realm.to_s) if realm
|
24
|
+
self[:exclusive] = exclusive unless exclusive.nil?
|
25
|
+
self[:passive] = passive unless passive.nil?
|
26
|
+
self[:active] = active unless active.nil?
|
27
|
+
self[:write] = write unless write.nil?
|
28
|
+
self[:read] = read unless read.nil?
|
29
|
+
self
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_h(free=false)
|
33
|
+
{
|
34
|
+
realm: self[:realm].to_s(free),
|
35
|
+
exclusive: self[:exclusive],
|
36
|
+
passive: self[:passive],
|
37
|
+
active: self[:active],
|
38
|
+
write: self[:write],
|
39
|
+
read: self[:read]
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
def free!
|
44
|
+
self[:realm].free!
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
class AccessRequestOk < ::FFI::Struct
|
5
|
+
layout(:ticket, :uint16)
|
6
|
+
|
7
|
+
def self.id
|
8
|
+
:access_request_ok
|
9
|
+
end
|
10
|
+
|
11
|
+
def id
|
12
|
+
:access_request_ok
|
13
|
+
end
|
14
|
+
|
15
|
+
def apply(ticket: nil)
|
16
|
+
self[:ticket] = Integer(ticket) if ticket
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_h(free=false)
|
21
|
+
{ticket: self[:ticket]}
|
22
|
+
end
|
23
|
+
|
24
|
+
def free!
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
class BasicAck < ::FFI::Struct
|
5
|
+
layout(
|
6
|
+
:delivery_tag, :uint64,
|
7
|
+
:multiple, Boolean
|
8
|
+
)
|
9
|
+
|
10
|
+
def self.id
|
11
|
+
:basic_ack
|
12
|
+
end
|
13
|
+
|
14
|
+
def id
|
15
|
+
:basic_ack
|
16
|
+
end
|
17
|
+
|
18
|
+
def apply(delivery_tag: nil, multiple: nil)
|
19
|
+
self[:delivery_tag] = Integer(delivery_tag) if delivery_tag
|
20
|
+
self[:multiple] = multiple unless multiple.nil?
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_h(free=false)
|
25
|
+
{
|
26
|
+
delivery_tag: self[:delivery_tag],
|
27
|
+
multiple: self[:multiple]
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def free!
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
class BasicCancel < ::FFI::Struct
|
5
|
+
layout(
|
6
|
+
:consumer_tag, Bytes,
|
7
|
+
:nowait, Boolean
|
8
|
+
)
|
9
|
+
|
10
|
+
def self.id
|
11
|
+
:basic_cancel
|
12
|
+
end
|
13
|
+
|
14
|
+
def id
|
15
|
+
:basic_cancel
|
16
|
+
end
|
17
|
+
|
18
|
+
def apply(consumer_tag: nil, nowait: nil)
|
19
|
+
self[:consumer_tag] = Bytes.from_s(consumer_tag.to_s) if consumer_tag
|
20
|
+
self[:nowait] = nowait unless nowait.nil?
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_h(free=false)
|
25
|
+
{
|
26
|
+
consumer_tag: self[:consumer_tag].to_s(free),
|
27
|
+
nowait: self[:nowait]
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def free!
|
32
|
+
self[:consumer_tag].free!
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
class BasicCancelOk < ::FFI::Struct
|
5
|
+
layout(:consumer_tag, Bytes)
|
6
|
+
|
7
|
+
def self.id
|
8
|
+
:basic_cancel_ok
|
9
|
+
end
|
10
|
+
|
11
|
+
def id
|
12
|
+
:basic_cancel_ok
|
13
|
+
end
|
14
|
+
|
15
|
+
def apply(consumer_tag: nil)
|
16
|
+
self[:consumer_tag] = Bytes.from_s(consumer_tag.to_s) if consumer_tag
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_h(free=false)
|
21
|
+
{consumer_tag: self[:consumer_tag].to_s(free)}
|
22
|
+
end
|
23
|
+
|
24
|
+
def free!
|
25
|
+
self[:consumer_tag].free!
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
class BasicConsume < ::FFI::Struct
|
5
|
+
layout(
|
6
|
+
:ticket, :uint16,
|
7
|
+
:queue, Bytes,
|
8
|
+
:consumer_tag, Bytes,
|
9
|
+
:no_local, Boolean,
|
10
|
+
:no_ack, Boolean,
|
11
|
+
:exclusive, Boolean,
|
12
|
+
:nowait, Boolean,
|
13
|
+
:arguments, Table
|
14
|
+
)
|
15
|
+
|
16
|
+
def self.id
|
17
|
+
:basic_consume
|
18
|
+
end
|
19
|
+
|
20
|
+
def id
|
21
|
+
:basic_consume
|
22
|
+
end
|
23
|
+
|
24
|
+
def apply(ticket: nil, queue: nil, consumer_tag: nil, no_local: nil, no_ack: nil, exclusive: nil, nowait: nil, arguments: nil)
|
25
|
+
self[:ticket] = Integer(ticket) if ticket
|
26
|
+
self[:queue] = Bytes.from_s(queue.to_s) if queue
|
27
|
+
self[:consumer_tag] = Bytes.from_s(consumer_tag.to_s) if consumer_tag
|
28
|
+
self[:no_local] = no_local unless no_local.nil?
|
29
|
+
self[:no_ack] = no_ack unless no_ack.nil?
|
30
|
+
self[:exclusive] = exclusive unless exclusive.nil?
|
31
|
+
self[:nowait] = nowait unless nowait.nil?
|
32
|
+
self[:arguments] = Table.from(arguments) if arguments
|
33
|
+
self
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_h(free=false)
|
37
|
+
{
|
38
|
+
ticket: self[:ticket],
|
39
|
+
queue: self[:queue].to_s(free),
|
40
|
+
consumer_tag: self[:consumer_tag].to_s(free),
|
41
|
+
no_local: self[:no_local],
|
42
|
+
no_ack: self[:no_ack],
|
43
|
+
exclusive: self[:exclusive],
|
44
|
+
nowait: self[:nowait],
|
45
|
+
arguments: self[:arguments].to_h(free)
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
def free!
|
50
|
+
self[:queue].free!
|
51
|
+
self[:consumer_tag].free!
|
52
|
+
self[:arguments].free!
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|