mercury_amqp 0.7.0 → 0.8.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 662c5f22f87cb89428b04038aeb9f9ae5b7c0413
4
- data.tar.gz: 53b76308c6e8374a29ce82391071c1f8a74f90b0
3
+ metadata.gz: 141403cd276f3d2a983a66c0cafbf79ba4c2326f
4
+ data.tar.gz: 89911705adad454ece304fce82bfb8135d172d4e
5
5
  SHA512:
6
- metadata.gz: bfa5327510adb7c6a64e7e6dccd714d954efd977e1547db8ec89fb884276f1a1ccfe0b36f5ee1b81b253643154762f7e763e804379b1f26b5cbfd08fc9336dfe
7
- data.tar.gz: cbe6ec96f716a9034cfb13d89d666ef65b80a01e6a3a062e3a846f591ff98ef565099a46387b1999cb6c9dafb53b2082426bd82681d71ecdff24cdafb1c04134
6
+ metadata.gz: ce0b2c4e559f687a749d9484634c88e85f777aa52fa21dbd69519e91e0c1537e388c9927a14ab9cef14f906e8480bc614a5003b6f45ce159ddb9dae80c3d544f
7
+ data.tar.gz: 1e2be3340a8bfa0ee9db21adccbad1997532f357472d71da08af205020d100d090ca10dd2765549fd715132fd2b34785314ac46517a069315a0b2a5381eef041
data/README.md CHANGED
@@ -105,15 +105,6 @@ arbitrary encoding. The receiving client receives the exact same
105
105
  string as the message content (assuming the serialized message fails to
106
106
  parse as JSON).
107
107
 
108
- ### Logatron integration
109
-
110
- Mercury depends on the
111
- [`logatron`][logatron] gem and propagates
112
- logatron's request ID (`Logatron.msg_id`) through the AMQP header
113
- `X-Ascent-Log-Id`. This enables a log aggregation service to find the
114
- logs associated with a particular incoming request, even though the
115
- log entries may be scattered across various services.
116
-
117
108
  ### Thread safety
118
109
 
119
110
  Mercury is not threadsafe. All calls to a particular instance must be made from the
@@ -423,7 +414,6 @@ is being intentionally ignored.
423
414
 
424
415
  [amqp]: https://github.com/ruby-amqp/amqp
425
416
  [em]: https://github.com/eventmachine/eventmachine
426
- [logatron]: https://github.com/indigobio/logatron
427
417
  [em_defer]: http://www.rubydoc.info/github/eventmachine/eventmachine/EventMachine.defer
428
418
  [fiber_defer]: https://github.com/indigobio/abstractivator/blob/master/lib/abstractivator/fiber_defer.rb
429
- [default_exchange]: https://www.rabbitmq.com/tutorials/amqp-concepts.html
419
+ [default_exchange]: https://www.rabbitmq.com/tutorials/amqp-concepts.html
@@ -1,8 +1,9 @@
1
1
  require 'amqp'
2
2
  require 'securerandom'
3
+ require 'logger'
3
4
  require 'mercury/wire_serializer'
4
5
  require 'mercury/received_message'
5
- require 'logatron/logatron'
6
+ require 'active_support/core_ext/enumerable'
6
7
 
7
8
  class Mercury
8
9
  ORIGINAL_TAG_HEADER = 'Original-Tag'.freeze
@@ -10,7 +11,7 @@ class Mercury
10
11
 
11
12
  attr_reader :amqp, :channel, :logger
12
13
 
13
- def self.open(logger: Logatron, **kws, &k)
14
+ def self.open(logger: Logger.new(STDOUT), **kws, &k)
14
15
  new(logger: logger, **kws, &k)
15
16
  nil
16
17
  end
@@ -94,7 +95,7 @@ class Mercury
94
95
  private :publish_internal
95
96
 
96
97
  def self.publish_opts(tag, headers)
97
- { routing_key: tag, persistent: true, headers: Logatron.http_headers.merge(headers) }
98
+ { routing_key: tag, persistent: true, headers: headers }
98
99
  end
99
100
 
100
101
  def start_listener(source_name, handler, tag_filter: nil, &k)
@@ -159,8 +160,6 @@ class Mercury
159
160
 
160
161
  private
161
162
 
162
- LOGATRAON_MSG_ID_HEADER = 'X-Ascent-Log-Id'.freeze
163
-
164
163
  # In AMQP, queue consumers ack requests after handling them. Unacked messages
165
164
  # are automatically returned to the queue, guaranteeing they are eventually handled.
166
165
  # Services often ack one request while publishing related messages. Ideally, these
@@ -214,9 +213,7 @@ class Mercury
214
213
  end
215
214
 
216
215
  def make_received_message(payload, metadata, work_queue_name: nil)
217
- msg = ReceivedMessage.new(read(payload), metadata, self, work_queue_name: work_queue_name)
218
- Logatron.msg_id = msg.headers[LOGATRAON_MSG_ID_HEADER]
219
- msg
216
+ ReceivedMessage.new(read(payload), metadata, self, work_queue_name: work_queue_name)
220
217
  end
221
218
 
222
219
  def existence_check(k, &check)
data/lib/mercury/sync.rb CHANGED
@@ -4,14 +4,14 @@ require 'bunny'
4
4
  class Mercury
5
5
  class Sync
6
6
  class << self
7
- def publish(source_name, msg, tag: '', amqp_opts: {}, wait_for_publisher_confirms: true)
7
+ def publish(source_name, msg, tag: '', headers: {}, amqp_opts: {}, wait_for_publisher_confirms: true)
8
8
  conn = Bunny.new(amqp_opts)
9
9
  conn.start
10
10
  ch = conn.create_channel
11
11
 
12
12
  ch.confirm_select if wait_for_publisher_confirms # see http://rubybunny.info/articles/extensions.html and Mercury#enable_publisher_confirms
13
13
  ex = ch.topic(source_name, Mercury.source_opts)
14
- ex.publish(WireSerializer.new.write(msg), **Mercury.publish_opts(tag, {}))
14
+ ex.publish(WireSerializer.new.write(msg), **Mercury.publish_opts(tag, headers))
15
15
  if wait_for_publisher_confirms
16
16
  ch.wait_for_confirms or raise 'failed to confirm publication'
17
17
  end
data/mercury_amqp.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'mercury_amqp'
7
- spec.version = '0.7.0'
7
+ spec.version = '0.8.0'
8
8
  spec.authors = ['Peter Winton']
9
9
  spec.email = ['wintonpc@gmail.com']
10
10
  spec.summary = 'AMQP-backed messaging layer'
@@ -29,6 +29,5 @@ Gem::Specification.new do |spec|
29
29
  spec.add_runtime_dependency 'amqp', '~> 1.5'
30
30
  spec.add_runtime_dependency 'bunny', '~> 2.1'
31
31
  spec.add_runtime_dependency 'binding_of_caller', '~> 0.7'
32
- spec.add_runtime_dependency 'logatron', '~> 0'
33
32
  spec.add_runtime_dependency 'activesupport', '> 4.0', '< 6.0'
34
33
  end
@@ -1,8 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'mercury/cps'
3
3
 
4
- Cps = Mercury::Cps
5
-
6
4
  describe Cps do
7
5
  include Cps::Methods
8
6
 
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'mercury'
3
+ require 'logger'
3
4
 
4
5
  describe Mercury do
5
6
  include MercuryFakeSpec
@@ -10,6 +11,7 @@ describe Mercury do
10
11
  let!(:sent) { { 'a' => 1 } }
11
12
  let!(:source) { 'test-exchange' }
12
13
  let!(:queue) { 'test-queue' }
14
+ let(:nullogger) { Logger.new(File::NULL) }
13
15
 
14
16
  describe '::open' do
15
17
  it 'opens a mercury instance' do
@@ -82,7 +84,7 @@ describe Mercury do
82
84
  # end
83
85
 
84
86
  it 'raises an error when the connection breaks' do
85
- expect { em { Mercury.open { done } } }.to raise_error /Lost connection/
87
+ expect { em { Mercury.open(logger: nullogger) { done } } }.to raise_error /Lost connection/
86
88
  expect(EM.reactor_running?).to be false # make sure we're not triggering EventMachine cleanup bugs
87
89
  end
88
90
 
@@ -137,7 +139,7 @@ describe Mercury do
137
139
  it 'raises when an error occurs' do
138
140
  expect do
139
141
  em do
140
- Mercury.open do |m|
142
+ Mercury.open(logger: nullogger) do |m|
141
143
  ch = m.instance_variable_get(:@channel)
142
144
  ch.acknowledge(42) # force a channel error
143
145
  end
@@ -153,7 +155,7 @@ describe Mercury do
153
155
  @mercury.publish(source, 'hello')
154
156
  end
155
157
  end
156
- Mercury.open(on_error: handler) do |m|
158
+ Mercury.open(logger: nullogger, on_error: handler) do |m|
157
159
  @mercury = m
158
160
  ch = m.instance_variable_get(:@channel)
159
161
  ch.acknowledge(42) # force a channel error
@@ -3,7 +3,6 @@ require 'spec_helper'
3
3
  require 'mercury'
4
4
  require 'mercury/monadic'
5
5
  require 'securerandom'
6
- require 'logatron/logatron'
7
6
 
8
7
  describe Mercury::Monadic do
9
8
  include Cps::Methods
@@ -164,24 +163,6 @@ describe Mercury::Monadic do
164
163
  end
165
164
  end
166
165
 
167
- it 'propagates logatron headers' do
168
- real_msg_id = SecureRandom.uuid
169
- Logatron.msg_id = real_msg_id
170
- test_with_mercury do |m|
171
- msgs = []
172
- seql do
173
- and_then { m.start_listener(source, &msgs.method(:push)) }
174
- and_lift { EM.next_tick { Logatron.msg_id = 'fake_msg_id' } } # we want this to happen right after publishing but before getting the response
175
- and_then { m.publish(source, msg) }
176
- and_then { wait_until { msgs.size == 1 } }
177
- and_lift do
178
- expect(msgs[0].headers['X-Ascent-Log-Id']).to eql real_msg_id
179
- expect(Logatron.msg_id).to eql real_msg_id
180
- end
181
- end
182
- end
183
- end
184
-
185
166
  itt 'uses AMQP-style tag filters' do
186
167
  test_with_mercury do |m|
187
168
  successes = []
@@ -6,6 +6,7 @@ describe Mercury::Sync do
6
6
  include Cps::Methods
7
7
  let!(:source) { 'test-exchange1' }
8
8
  let!(:queue) { 'test-queue1' }
9
+ let(:headers) { {'X-Domain-Variable' => 'value'} }
9
10
  describe '::publish' do
10
11
  %w{with without}.each do |w|
11
12
  it "publishes synchronously (#{w} publisher confirms)" do
@@ -15,11 +16,12 @@ describe Mercury::Sync do
15
16
  test_with_mercury(wait_for_publisher_confirms: use_publisher_confirms) do |m|
16
17
  seql do
17
18
  and_then { m.start_listener(source, received.method(:push)) }
18
- and_lift { Mercury::Sync.publish(source, sent) }
19
+ and_lift { Mercury::Sync.publish(source, sent, headers: headers) }
19
20
  and_then { wait_until { received.any? } }
20
21
  and_lift do
21
22
  expect(received.size).to eql 1
22
23
  expect(received[0].content).to eql sent
24
+ expect(received[0].headers).to eql headers
23
25
  end
24
26
  end
25
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mercury_amqp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Winton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-26 00:00:00.000000000 Z
11
+ date: 2017-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -164,20 +164,6 @@ dependencies:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0.7'
167
- - !ruby/object:Gem::Dependency
168
- name: logatron
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :runtime
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
167
  - !ruby/object:Gem::Dependency
182
168
  name: activesupport
183
169
  requirement: !ruby/object:Gem::Requirement