Class: Tina4::QueueBackends::RabbitmqBackend
- Inherits:
-
Object
- Object
- Tina4::QueueBackends::RabbitmqBackend
- Defined in:
- lib/tina4/queue_backends/rabbitmq_backend.rb
Instance Method Summary collapse
- #acknowledge(_message) ⇒ Object
- #close ⇒ Object
- #dead_letter(message) ⇒ Object
- #dequeue(topic) ⇒ Object
- #enqueue(message) ⇒ Object
-
#initialize(options = {}) ⇒ RabbitmqBackend
constructor
A new instance of RabbitmqBackend.
- #requeue(message) ⇒ Object
- #size(topic) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ RabbitmqBackend
Returns a new instance of RabbitmqBackend.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/tina4/queue_backends/rabbitmq_backend.rb', line 6 def initialize( = {}) require "bunny" @connection = Bunny.new( host: [:host] || "localhost", port: [:port] || 5672, username: [:username] || "guest", password: [:password] || "guest", vhost: [:vhost] || "/" ) @connection.start @channel = @connection.create_channel @queues = {} @exchanges = {} rescue LoadError raise "RabbitMQ backend requires the 'bunny' gem. Install with: gem install bunny" end |
Instance Method Details
#acknowledge(_message) ⇒ Object
43 44 45 |
# File 'lib/tina4/queue_backends/rabbitmq_backend.rb', line 43 def acknowledge() @channel.acknowledge(@last_delivery_tag) if @last_delivery_tag end |
#close ⇒ Object
61 62 63 64 |
# File 'lib/tina4/queue_backends/rabbitmq_backend.rb', line 61 def close @channel&.close @connection&.close end |
#dead_letter(message) ⇒ Object
51 52 53 54 |
# File 'lib/tina4/queue_backends/rabbitmq_backend.rb', line 51 def dead_letter() dlq = get_queue("#{.topic}.dead_letter") dlq.publish(.to_json, persistent: true) end |
#dequeue(topic) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/tina4/queue_backends/rabbitmq_backend.rb', line 28 def dequeue(topic) queue = get_queue(topic) delivery_info, _properties, payload = queue.pop return nil unless payload data = JSON.parse(payload) msg = Tina4::Job.new( topic: data["topic"], payload: data["payload"], id: data["id"] ) @last_delivery_tag = delivery_info.delivery_tag msg end |
#enqueue(message) ⇒ Object
23 24 25 26 |
# File 'lib/tina4/queue_backends/rabbitmq_backend.rb', line 23 def enqueue() queue = get_queue(.topic) queue.publish(.to_json, persistent: true) end |
#requeue(message) ⇒ Object
47 48 49 |
# File 'lib/tina4/queue_backends/rabbitmq_backend.rb', line 47 def requeue() enqueue() end |
#size(topic) ⇒ Object
56 57 58 59 |
# File 'lib/tina4/queue_backends/rabbitmq_backend.rb', line 56 def size(topic) queue = get_queue(topic) queue. end |