amqp-client 1.0.1 → 1.1.2

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.
@@ -10,9 +10,7 @@ module AMQP
10
10
  # Having a class for each frame type is more expensive in terms of CPU and memory
11
11
  # @api private
12
12
  module FrameBytes
13
- module_function
14
-
15
- def connection_start_ok(response, properties)
13
+ def self.connection_start_ok(response, properties)
16
14
  prop_tbl = Table.encode(properties)
17
15
  [
18
16
  1, # type: method
@@ -28,7 +26,7 @@ module AMQP
28
26
  ].pack("C S> L> S> S> L>a* Ca* L>a* Ca* C")
29
27
  end
30
28
 
31
- def connection_tune_ok(channel_max, frame_max, heartbeat)
29
+ def self.connection_tune_ok(channel_max, frame_max, heartbeat)
32
30
  [
33
31
  1, # type: method
34
32
  0, # channel id
@@ -42,7 +40,7 @@ module AMQP
42
40
  ].pack("CS>L>S>S>S>L>S>C")
43
41
  end
44
42
 
45
- def connection_open(vhost)
43
+ def self.connection_open(vhost)
46
44
  [
47
45
  1, # type: method
48
46
  0, # channel id
@@ -56,7 +54,7 @@ module AMQP
56
54
  ].pack("C S> L> S> S> Ca* CCC")
57
55
  end
58
56
 
59
- def connection_close(code, reason)
57
+ def self.connection_close(code, reason)
60
58
  frame_size = 2 + 2 + 2 + 1 + reason.bytesize + 2 + 2
61
59
  [
62
60
  1, # type: method
@@ -72,7 +70,7 @@ module AMQP
72
70
  ].pack("C S> L> S> S> S> Ca* S> S> C")
73
71
  end
74
72
 
75
- def connection_close_ok
73
+ def self.connection_close_ok
76
74
  [
77
75
  1, # type: method
78
76
  0, # channel id
@@ -83,7 +81,7 @@ module AMQP
83
81
  ].pack("C S> L> S> S> C")
84
82
  end
85
83
 
86
- def channel_open(id)
84
+ def self.channel_open(id)
87
85
  [
88
86
  1, # type: method
89
87
  id, # channel id
@@ -95,7 +93,7 @@ module AMQP
95
93
  ].pack("C S> L> S> S> C C")
96
94
  end
97
95
 
98
- def channel_close(id, reason, code)
96
+ def self.channel_close(id, reason, code)
99
97
  frame_size = 2 + 2 + 2 + 1 + reason.bytesize + 2 + 2
100
98
  [
101
99
  1, # type: method
@@ -111,7 +109,7 @@ module AMQP
111
109
  ].pack("C S> L> S> S> S> Ca* S> S> C")
112
110
  end
113
111
 
114
- def channel_close_ok(id)
112
+ def self.channel_close_ok(id)
115
113
  [
116
114
  1, # type: method
117
115
  id, # channel id
@@ -122,7 +120,7 @@ module AMQP
122
120
  ].pack("C S> L> S> S> C")
123
121
  end
124
122
 
125
- def exchange_declare(id, name, type, passive, durable, auto_delete, internal, arguments)
123
+ def self.exchange_declare(id, name, type, passive, durable, auto_delete, internal, arguments)
126
124
  no_wait = false
127
125
  bits = 0
128
126
  bits |= (1 << 0) if passive
@@ -147,7 +145,7 @@ module AMQP
147
145
  ].pack("C S> L> S> S> S> Ca* Ca* C L>a* C")
148
146
  end
149
147
 
150
- def exchange_delete(id, name, if_unused, no_wait)
148
+ def self.exchange_delete(id, name, if_unused, no_wait)
151
149
  bits = 0
152
150
  bits |= (1 << 0) if if_unused
153
151
  bits |= (1 << 1) if no_wait
@@ -165,7 +163,7 @@ module AMQP
165
163
  ].pack("C S> L> S> S> S> Ca* C C")
166
164
  end
167
165
 
168
- def exchange_bind(id, destination, source, binding_key, no_wait, arguments)
166
+ def self.exchange_bind(id, destination, source, binding_key, no_wait, arguments)
169
167
  tbl = Table.encode(arguments)
170
168
  frame_size = 2 + 2 + 2 + 1 + destination.bytesize + 1 + source.bytesize + 1 +
171
169
  binding_key.bytesize + 1 + 4 + tbl.bytesize
@@ -185,7 +183,7 @@ module AMQP
185
183
  ].pack("C S> L> S> S> S> Ca* Ca* Ca* C L>a* C")
186
184
  end
187
185
 
188
- def exchange_unbind(id, destination, source, binding_key, no_wait, arguments)
186
+ def self.exchange_unbind(id, destination, source, binding_key, no_wait, arguments)
189
187
  tbl = Table.encode(arguments)
190
188
  frame_size = 2 + 2 + 2 + 1 + destination.bytesize + 1 + source.bytesize + 1 +
191
189
  binding_key.bytesize + 1 + 4 + tbl.bytesize
@@ -205,7 +203,7 @@ module AMQP
205
203
  ].pack("C S> L> S> S> S> Ca* Ca* Ca* C L>a* C")
206
204
  end
207
205
 
208
- def queue_declare(id, name, passive, durable, exclusive, auto_delete, arguments)
206
+ def self.queue_declare(id, name, passive, durable, exclusive, auto_delete, arguments)
209
207
  no_wait = false
210
208
  bits = 0
211
209
  bits |= (1 << 0) if passive
@@ -229,7 +227,7 @@ module AMQP
229
227
  ].pack("C S> L> S> S> S> Ca* C L>a* C")
230
228
  end
231
229
 
232
- def queue_delete(id, name, if_unused, if_empty, no_wait)
230
+ def self.queue_delete(id, name, if_unused, if_empty, no_wait)
233
231
  bits = 0
234
232
  bits |= (1 << 0) if if_unused
235
233
  bits |= (1 << 1) if if_empty
@@ -248,7 +246,7 @@ module AMQP
248
246
  ].pack("C S> L> S> S> S> Ca* C C")
249
247
  end
250
248
 
251
- def queue_bind(id, queue, exchange, binding_key, no_wait, arguments)
249
+ def self.queue_bind(id, queue, exchange, binding_key, no_wait, arguments)
252
250
  tbl = Table.encode(arguments)
253
251
  frame_size = 2 + 2 + 2 + 1 + queue.bytesize + 1 + exchange.bytesize + 1 +
254
252
  binding_key.bytesize + 1 + 4 + tbl.bytesize
@@ -268,7 +266,7 @@ module AMQP
268
266
  ].pack("C S> L> S> S> S> Ca* Ca* Ca* C L>a* C")
269
267
  end
270
268
 
271
- def queue_unbind(id, queue, exchange, binding_key, arguments)
269
+ def self.queue_unbind(id, queue, exchange, binding_key, arguments)
272
270
  tbl = Table.encode(arguments)
273
271
  frame_size = 2 + 2 + 2 + 1 + queue.bytesize + 1 + exchange.bytesize + 1 +
274
272
  binding_key.bytesize + 4 + tbl.bytesize
@@ -287,7 +285,7 @@ module AMQP
287
285
  ].pack("C S> L> S> S> S> Ca* Ca* Ca* L>a* C")
288
286
  end
289
287
 
290
- def queue_purge(id, queue, no_wait)
288
+ def self.queue_purge(id, queue, no_wait)
291
289
  frame_size = 2 + 2 + 2 + 1 + queue.bytesize + 1
292
290
  [
293
291
  1, # type: method
@@ -302,7 +300,7 @@ module AMQP
302
300
  ].pack("C S> L> S> S> S> Ca* C C")
303
301
  end
304
302
 
305
- def basic_get(id, queue, no_ack)
303
+ def self.basic_get(id, queue, no_ack)
306
304
  frame_size = 2 + 2 + 2 + 1 + queue.bytesize + 1
307
305
  [
308
306
  1, # type: method
@@ -317,7 +315,7 @@ module AMQP
317
315
  ].pack("C S> L> S> S> S> Ca* C C")
318
316
  end
319
317
 
320
- def basic_publish(id, exchange, routing_key, mandatory)
318
+ def self.basic_publish(id, exchange, routing_key, mandatory)
321
319
  frame_size = 2 + 2 + 2 + 1 + exchange.bytesize + 1 + routing_key.bytesize + 1
322
320
  [
323
321
  1, # type: method
@@ -333,8 +331,8 @@ module AMQP
333
331
  ].pack("C S> L> S> S> S> Ca* Ca* C C")
334
332
  end
335
333
 
336
- def header(id, body_size, properties)
337
- props = Properties.new(**properties).encode
334
+ def self.header(id, body_size, properties)
335
+ props = Properties.encode(properties)
338
336
  frame_size = 2 + 2 + 8 + props.bytesize
339
337
  [
340
338
  2, # type: header
@@ -348,7 +346,7 @@ module AMQP
348
346
  ].pack("C S> L> S> S> Q> a* C")
349
347
  end
350
348
 
351
- def body(id, body_part)
349
+ def self.body(id, body_part)
352
350
  [
353
351
  3, # type: body
354
352
  id, # channel id
@@ -358,7 +356,7 @@ module AMQP
358
356
  ].pack("C S> L> a* C")
359
357
  end
360
358
 
361
- def basic_consume(id, queue, tag, no_ack, exclusive, arguments)
359
+ def self.basic_consume(id, queue, tag, no_ack, exclusive, arguments)
362
360
  no_local = false
363
361
  no_wait = false
364
362
  bits = 0
@@ -383,7 +381,7 @@ module AMQP
383
381
  ].pack("C S> L> S> S> S> Ca* Ca* C L>a* C")
384
382
  end
385
383
 
386
- def basic_cancel(id, consumer_tag, no_wait: false)
384
+ def self.basic_cancel(id, consumer_tag, no_wait: false)
387
385
  frame_size = 2 + 2 + 1 + consumer_tag.bytesize + 1
388
386
  [
389
387
  1, # type: method
@@ -397,7 +395,7 @@ module AMQP
397
395
  ].pack("C S> L> S> S> Ca* C C")
398
396
  end
399
397
 
400
- def basic_cancel_ok(id, consumer_tag)
398
+ def self.basic_cancel_ok(id, consumer_tag)
401
399
  frame_size = 2 + 2 + 1 + consumer_tag.bytesize + 1
402
400
  [
403
401
  1, # type: method
@@ -410,7 +408,7 @@ module AMQP
410
408
  ].pack("C S> L> S> S> Ca* C")
411
409
  end
412
410
 
413
- def basic_ack(id, delivery_tag, multiple)
411
+ def self.basic_ack(id, delivery_tag, multiple)
414
412
  frame_size = 2 + 2 + 8 + 1
415
413
  [
416
414
  1, # type: method
@@ -424,7 +422,7 @@ module AMQP
424
422
  ].pack("C S> L> S> S> Q> C C")
425
423
  end
426
424
 
427
- def basic_nack(id, delivery_tag, multiple, requeue)
425
+ def self.basic_nack(id, delivery_tag, multiple, requeue)
428
426
  bits = 0
429
427
  bits |= (1 << 0) if multiple
430
428
  bits |= (1 << 1) if requeue
@@ -441,7 +439,7 @@ module AMQP
441
439
  ].pack("C S> L> S> S> Q> C C")
442
440
  end
443
441
 
444
- def basic_reject(id, delivery_tag, requeue)
442
+ def self.basic_reject(id, delivery_tag, requeue)
445
443
  frame_size = 2 + 2 + 8 + 1
446
444
  [
447
445
  1, # type: method
@@ -455,7 +453,7 @@ module AMQP
455
453
  ].pack("C S> L> S> S> Q> C C")
456
454
  end
457
455
 
458
- def basic_qos(id, prefetch_size, prefetch_count, global)
456
+ def self.basic_qos(id, prefetch_size, prefetch_count, global)
459
457
  frame_size = 2 + 2 + 4 + 2 + 1
460
458
  [
461
459
  1, # type: method
@@ -470,7 +468,7 @@ module AMQP
470
468
  ].pack("C S> L> S> S> L> S> C C")
471
469
  end
472
470
 
473
- def basic_recover(id, requeue)
471
+ def self.basic_recover(id, requeue)
474
472
  frame_size = 2 + 2 + 1
475
473
  [
476
474
  1, # type: method
@@ -483,7 +481,7 @@ module AMQP
483
481
  ].pack("C S> L> S> S> C C")
484
482
  end
485
483
 
486
- def confirm_select(id, no_wait)
484
+ def self.confirm_select(id, no_wait)
487
485
  [
488
486
  1, # type: method
489
487
  id, # channel id
@@ -495,7 +493,7 @@ module AMQP
495
493
  ].pack("C S> L> S> S> C C")
496
494
  end
497
495
 
498
- def tx_select(id)
496
+ def self.tx_select(id)
499
497
  frame_size = 2 + 2
500
498
  [
501
499
  1, # type: method
@@ -507,7 +505,7 @@ module AMQP
507
505
  ].pack("C S> L> S> S> C")
508
506
  end
509
507
 
510
- def tx_commit(id)
508
+ def self.tx_commit(id)
511
509
  frame_size = 2 + 2
512
510
  [
513
511
  1, # type: method
@@ -519,7 +517,7 @@ module AMQP
519
517
  ].pack("C S> L> S> S> C")
520
518
  end
521
519
 
522
- def tx_rollback(id)
520
+ def self.tx_rollback(id)
523
521
  frame_size = 2 + 2
524
522
  [
525
523
  1, # type: method
@@ -3,52 +3,109 @@
3
3
  module AMQP
4
4
  class Client
5
5
  # A message delivered from the broker
6
- # @!attribute channel
7
- # @return [Connection::Channel] The channel the message was deliviered to
8
- # @!attribute delivery_tag
9
- # @return [Integer] The delivery tag of the message, used for acknowledge or reject the message
10
- # @!attribute exchange_name
11
- # @return [String] Name of the exchange the message was published to
12
- # @!attribute routing_key
13
- # @return [String] The routing key the message was published with
14
- # @!attribute properties
15
- # @return [Properties]
16
- # @!attribute body
17
- # @return [String] The message body
18
- # @!attribute redelivered
19
- # @return [Boolean] True if the message have been delivered before
20
- # @!attribute consumer_tag
21
- # @return [String] The tag of the consumer the message was deliviered to
22
- # @return [nil] Nil if the message was polled and not deliviered to a consumer
23
- Message =
24
- Struct.new(:channel, :delivery_tag, :exchange_name, :routing_key, :properties, :body, :redelivered, :consumer_tag) do
25
- # Acknowledge the message
26
- # @return [nil]
27
- def ack
28
- channel.basic_ack(delivery_tag)
29
- end
30
-
31
- # Reject the message
32
- # @param requeue [Boolean] If true the message will be put back into the queue again, ready to be redelivered
33
- # @return [nil]
34
- def reject(requeue: false)
35
- channel.basic_reject(delivery_tag, requeue: requeue)
36
- end
6
+ class Message
7
+ # @api private
8
+ def initialize(channel, consumer_tag, delivery_tag, exchange, routing_key, redelivered)
9
+ @channel = channel
10
+ @consumer_tag = consumer_tag
11
+ @delivery_tag = delivery_tag
12
+ @exchange = exchange
13
+ @routing_key = routing_key
14
+ @redelivered = redelivered
15
+ @properties = nil
16
+ @body = ""
37
17
  end
38
18
 
19
+ # The channel the message was deliviered to
20
+ # @return [Connection::Channel]
21
+ attr_reader :channel
22
+
23
+ # The tag of the consumer the message was deliviered to
24
+ # @return [String]
25
+ # @return [nil] If the message was polled and not deliviered to a consumer
26
+ attr_reader :consumer_tag
27
+
28
+ # The delivery tag of the message, used for acknowledge or reject the message
29
+ # @return [Integer]
30
+ attr_reader :delivery_tag
31
+
32
+ # Name of the exchange the message was published to
33
+ # @return [String]
34
+ attr_reader :exchange
35
+
36
+ # The routing key the message was published with
37
+ # @return [String]
38
+ attr_reader :routing_key
39
+
40
+ # True if the message have been delivered before
41
+ # @return [Boolean]
42
+ attr_reader :redelivered
43
+
44
+ # Message properties
45
+ # @return [Properties]
46
+ attr_accessor :properties
47
+
48
+ # The message body
49
+ # @return [String]
50
+ attr_accessor :body
51
+
52
+ # Acknowledge the message
53
+ # @return [nil]
54
+ def ack
55
+ @channel.basic_ack(@delivery_tag)
56
+ end
57
+
58
+ # Reject the message
59
+ # @param requeue [Boolean] If true the message will be put back into the queue again, ready to be redelivered
60
+ # @return [nil]
61
+ def reject(requeue: false)
62
+ @channel.basic_reject(@delivery_tag, requeue: requeue)
63
+ end
64
+
65
+ # @see #exchange
66
+ # @deprecated
67
+ # @!attribute [r] exchange_name
68
+ # @return [String]
69
+ def exchange_name
70
+ @exchange
71
+ end
72
+ end
73
+
39
74
  # A published message returned by the broker due to some error
40
- # @!attribute reply_code
41
- # @return [Integer] Error code
42
- # @!attribute reply_text
43
- # @return [String] Description on why the message was returned
44
- # @!attribute exchange
45
- # @return [String] Name of the exchange the message was published to
46
- # @!attribute routing_key
47
- # @return [String] The routing key the message was published with
48
- # @!attribute properties
49
- # @return [Properties]
50
- # @!attribute body
51
- # @return [String] The message body
52
- ReturnMessage = Struct.new(:reply_code, :reply_text, :exchange, :routing_key, :properties, :body)
75
+ class ReturnMessage
76
+ # @api private
77
+ def initialize(reply_code, reply_text, exchange, routing_key)
78
+ @reply_code = reply_code
79
+ @reply_text = reply_text
80
+ @exchange = exchange
81
+ @routing_key = routing_key
82
+ @properties = nil
83
+ @body = ""
84
+ end
85
+
86
+ # Error code
87
+ # @return [Integer]
88
+ attr_reader :reply_code
89
+
90
+ # Description on why the message was returned
91
+ # @return [String]
92
+ attr_reader :reply_text
93
+
94
+ # Name of the exchange the message was published to
95
+ # @return [String]
96
+ attr_reader :exchange
97
+
98
+ # The routing key the message was published with
99
+ # @return [String]
100
+ attr_reader :routing_key
101
+
102
+ # Message properties
103
+ # @return [Properties]
104
+ attr_accessor :properties
105
+
106
+ # The message body
107
+ # @return [String]
108
+ attr_accessor :body
109
+ end
53
110
  end
54
111
  end