message-driver 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e9dc548fdfd73e6d0b82f2ca05a5560ef883c2bb
|
4
|
+
data.tar.gz: a55216b3b977be05bcd575e296654ab2bb75b5f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfa2114ec8b59a6a4fd40e72114cdace5a50367beef49de9f7531a202e2ff62cbb7049381e264ae6e743716456f5ce0a96ecaa2cb02acb6c658d67fe3fc85387
|
7
|
+
data.tar.gz: 3e37a3937bd46591458c8bd9c755625f941803e5b9caf3d1b11a9ed854c2d09a3a95ae655c52b69a827e17e617b2ec121129e3f20e17615a7cc8a61da03e145f
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.0.1 - 2018-06-06
|
4
|
+
|
5
|
+
* Fix an edge case with publisher acknowledgements in the bunny adapter. #40
|
6
|
+
|
3
7
|
## 1.0.0 - 2018-05-07
|
4
8
|
|
5
9
|
We decided to go 1.0 just because it was time to be done with the 0.x since we have been using this in production since 2013.
|
@@ -341,7 +341,7 @@ module MessageDriver
|
|
341
341
|
end
|
342
342
|
begin
|
343
343
|
if @in_confirms_transaction
|
344
|
-
@channel.wait_for_confirms unless @rollback_only || @channel.nil?
|
344
|
+
@channel.wait_for_confirms unless @rollback_only || @channel.nil? || !@channel.using_publisher_confirms?
|
345
345
|
elsif is_transactional? && valid? && !@need_channel_reset && @require_commit
|
346
346
|
handle_errors do
|
347
347
|
if @rollback_only
|
@@ -380,6 +380,82 @@ module MessageDriver
|
|
380
380
|
end
|
381
381
|
end
|
382
382
|
|
383
|
+
context 'publisher confirmations in a consumer', :aggregate_failures do
|
384
|
+
let(:source_queue) { adapter_context.create_destination('subscriptions_example_queue') }
|
385
|
+
let(:destination) { adapter_context.create_destination('confirms_destination_queue') }
|
386
|
+
let(:body) { 'Testing the QueueDestination' }
|
387
|
+
let(:headers) { { 'foo' => 'bar' } }
|
388
|
+
let(:properties) { { persistent: false } }
|
389
|
+
let(:error_handler) { double('error_handler', call: nil) }
|
390
|
+
|
391
|
+
let(:subscription) { adapter_context.subscribe(source_queue, {ack: :auto, error_handler: error_handler}, &consumer) }
|
392
|
+
let(:subscription_channel) { subscription.sub_ctx.channel }
|
393
|
+
|
394
|
+
before do
|
395
|
+
allow(error_handler).to receive(:call) do |err, _msg|
|
396
|
+
puts err.inspect
|
397
|
+
end
|
398
|
+
destination.purge
|
399
|
+
source_queue.purge
|
400
|
+
subscription
|
401
|
+
allow(subscription_channel).to receive(:wait_for_confirms).and_call_original
|
402
|
+
end
|
403
|
+
|
404
|
+
after do
|
405
|
+
subscription.unsubscribe
|
406
|
+
end
|
407
|
+
|
408
|
+
context 'when messages are sent during the transaction' do
|
409
|
+
let(:consumer) do
|
410
|
+
->(msg) do
|
411
|
+
MessageDriver::Client.with_message_transaction(type: :confirm_and_wait) do
|
412
|
+
destination.publish(msg.body, msg.headers, msg.properties)
|
413
|
+
end
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
it 'publishes and waits for confirmation before "committing" the transaction' do
|
418
|
+
expect {
|
419
|
+
source_queue.publish(body, headers, properties)
|
420
|
+
pause_if_needed
|
421
|
+
}.to change { destination.message_count }.from(0).to(1)
|
422
|
+
|
423
|
+
expect(subscription_channel).to be_using_publisher_confirms
|
424
|
+
expect(subscription_channel.unconfirmed_set).to be_empty
|
425
|
+
|
426
|
+
expect(adapter_context.channel).not_to be_using_publisher_confirms
|
427
|
+
expect(adapter_context.channel.unconfirmed_set).to be_nil
|
428
|
+
|
429
|
+
expect(error_handler).not_to have_received(:call)
|
430
|
+
expect(subscription_channel).to have_received(:wait_for_confirms)
|
431
|
+
end
|
432
|
+
end
|
433
|
+
|
434
|
+
context 'when no messages are sent during the transaction' do
|
435
|
+
let(:consumer) do
|
436
|
+
->(msg) do
|
437
|
+
MessageDriver::Client.with_message_transaction(type: :confirm_and_wait) do
|
438
|
+
# do nothing
|
439
|
+
end
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
443
|
+
it 'publishes and waits for confirmation before "committing" the transaction' do
|
444
|
+
source_queue.publish(body, headers, properties)
|
445
|
+
pause_if_needed
|
446
|
+
|
447
|
+
expect(subscription.sub_ctx.channel).not_to be_using_publisher_confirms
|
448
|
+
expect(subscription.sub_ctx.channel.unconfirmed_set).to be_nil
|
449
|
+
|
450
|
+
expect(adapter_context.channel).not_to be_using_publisher_confirms
|
451
|
+
expect(adapter_context.channel.unconfirmed_set).to be_nil
|
452
|
+
|
453
|
+
expect(error_handler).not_to have_received(:call)
|
454
|
+
expect(subscription_channel).not_to have_received(:wait_for_confirms)
|
455
|
+
end
|
456
|
+
end
|
457
|
+
end
|
458
|
+
|
383
459
|
context 'during a transaction with a transactional context' do
|
384
460
|
let(:channel) { adapter_context.ensure_channel }
|
385
461
|
let(:destination) { MessageDriver::Client.dynamic_destination('tx.test.queue') }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: message-driver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Campbell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -208,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
208
|
version: '0'
|
209
209
|
requirements: []
|
210
210
|
rubyforge_project:
|
211
|
-
rubygems_version: 2.
|
211
|
+
rubygems_version: 2.6.14
|
212
212
|
signing_key:
|
213
213
|
specification_version: 4
|
214
214
|
summary: Easy message queues for ruby
|