Skip to content

Commit 1c8f3a4

Browse files
committed
Add support for if-unused and if-empty for delete_queue
1 parent 74a5f33 commit 1c8f3a4

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

lib/rabbitmq/http/client.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,12 @@ def declare_queue(vhost, name, attributes)
177177
decode_resource(response)
178178
end
179179

180-
def delete_queue(vhost, name)
181-
decode_resource(@connection.delete("queues/#{encode_uri_path_segment(vhost)}/#{encode_uri_path_segment(name)}"))
180+
def delete_queue(vhost, name, if_unused = false, if_empty = false)
181+
response = @connection.delete("queues/#{encode_uri_path_segment(vhost)}/#{encode_uri_path_segment(name)}") do |req|
182+
req.params["if-unused"] = true if if_unused
183+
req.params["if-empty"] = true if if_empty
184+
end
185+
decode_resource(response)
182186
end
183187

184188
def list_queue_bindings(vhost, queue, query = {})

spec/integration/api_endpoints_spec.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,32 @@ def await_event_propagation
506506
q = @channel.queue(queue_name, durable: false)
507507
subject.delete_queue("/", queue_name)
508508
end
509+
510+
it "doesn't delete non-empty queue if if-empty is set" do
511+
q = @channel.queue(queue_name, durable: false)
512+
q.publish("hello")
513+
expect do
514+
subject.delete_queue("/", queue_name, false, true)
515+
end.to raise_error(Faraday::ClientError)
516+
517+
subject.purge_queue("/", q.name)
518+
subject.delete_queue("/", queue_name, false, true)
519+
end
520+
521+
it "doesn't delete used queue if if-unused is set" do
522+
q = @channel.queue(queue_name, durable: false)
523+
# Simulate the queue being used by creating a consumer
524+
consumer = q.subscribe do |_delivery_info, _properties, _body|
525+
# consumer block
526+
end
527+
528+
expect do
529+
subject.delete_queue("/", queue_name, true, false)
530+
end.to raise_error(Faraday::ClientError)
531+
532+
consumer.cancel
533+
subject.delete_queue("/", queue_name, false, true)
534+
end
509535
end
510536

511537
describe "GET /api/queues/:vhost/:name/bindings" do

0 commit comments

Comments
 (0)