basquiat 1.4.0 → 1.5.0

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
2
  SHA256:
3
- metadata.gz: c58b903c923eb880488c658ccd185076edac51ccc279cdc3e03833676a6a1770
4
- data.tar.gz: c68e49c4012d1d52b199d22df0ce6a04cfd9f551361e516e927f8679d0cc9719
3
+ metadata.gz: bc25a020cacd1dff67867ecf85f81c82e4feae712aafdcebd26f7076d11c740c
4
+ data.tar.gz: fc480994ad88edfcb3d61e990e900d32f34e55164aaa149a5e254eeb459db3a3
5
5
  SHA512:
6
- metadata.gz: 99dee9a41070083aa8cc9c8f1dd762444684246c4592e97ea6b26b2eee35be88cb200d5704e1771bb076be0f1cce6a58b3796f99675d589ea3d47baf0167d102
7
- data.tar.gz: 5299eba89ddd38bbaeb081aa8bae8ddeede2614b95745c42a68c5e71a8aaaa974406b2e5fb33b212a54fe06e820e1b9cfa897f3495a9127747f5c18fd28d0a4e
6
+ metadata.gz: 3f8442912b5a26b0223c22d8abdc0a580c06d935ed346a4b57092b58c90440de0f2861396ea9e651e4881650adaaed55b210942a653bf3b56481f804c554e335
7
+ data.tar.gz: 99e0ab18b267398e71c2dc25d0c933e2e6caa939868037e9383a803815a137f7278662f47d7e0902decdf9afd1c82d8cdeffce74ec79dcb1ffa42966e7c50d76
data/README.md CHANGED
@@ -74,6 +74,7 @@ end
74
74
  The available options are:
75
75
 
76
76
  - config_file= Receive a path to an YAML file (example here)
77
+ - connection= Makes Basquiat to use a provided Bunny connection
77
78
  - queue_name= The default queue name
78
79
  - exchange_name= The default exchange name
79
80
  - environment= Forces the environment to something other than the value of BASQUIAT_ENV
@@ -22,7 +22,7 @@ module Basquiat
22
22
  durable: true,
23
23
  options: {}
24
24
  },
25
- publisher: { confirm: true, persistent: false, session_pool: { size: 1, timeout: 5 } },
25
+ publisher: { confirm: true, persistent: false },
26
26
  consumer: { prefetch: 1000, manual_ack: true },
27
27
  requeue: { enabled: false } }
28
28
  end
@@ -7,9 +7,12 @@ module Basquiat
7
7
  class Connection < SimpleDelegator
8
8
  # @param hosts: [Array<String>] IPs or FQDN of the RabbitMQ instances
9
9
  # @param port [Fixnum] Port that the RabbitMQ instances run
10
+ # @option failover: [Fixnum|Symbol] :heartbeat (:server) Heartbeat timeout to offer to the server
10
11
  # @option failover: [Fixnum] :max_retries (5) Maximum number of reconnection retries
11
12
  # @option failover: [Fixnum] :default_timeout (5) Interval between to reconnect attempts
12
13
  # @option failover: [Fixnum] :connection_timeout (5) Allowed time before a connection attempt timeouts
14
+ # @option failover: [Fixnum] :read_timeout (30) TCP socket read timeout in seconds
15
+ # @option failover: [Fixnum] :write_timeout (30) TCP socket write timeout in seconds
13
16
  # @option auth: [String] :user ('guest')
14
17
  # @option auth: [String] :password ('guest')
15
18
  def initialize(hosts:, port: 5672, failover: {}, auth: {})
@@ -22,7 +25,7 @@ module Basquiat
22
25
  # Creates a channel
23
26
  # @return [Bunny::Channel]
24
27
  def create_channel
25
- connection.start
28
+ connection.start unless connected?
26
29
  Basquiat.logger.debug 'Creating a new channel'
27
30
  connection.create_channel
28
31
  end
@@ -53,14 +56,17 @@ module Basquiat
53
56
  end
54
57
 
55
58
  def connection
56
- @connection ||= Bunny.new(
59
+ @connection ||= Basquiat.configuration.connection || Bunny.new(
57
60
  hosts: @hosts,
58
61
  port: @port,
59
62
  username: @auth.fetch(:user, 'guest'),
60
63
  password: @auth.fetch(:password, 'guest'),
64
+ heartbeat: @failover.fetch(:heartbeat, :server),
61
65
  recovery_attempts: @failover.fetch(:max_retries, 5),
62
66
  network_recovery_interval: @failover.fetch(:default_timeout, 5),
63
67
  connection_timeout: @failover.fetch(:connection_timeout, 5),
68
+ read_timeout: @failover.fetch(:read_timeout, 30),
69
+ write_timeout: @failover.fetch(:write_timeout, 30),
64
70
  logger: Basquiat.logger
65
71
  )
66
72
  __setobj__(@connection)
@@ -43,7 +43,11 @@ module Basquiat
43
43
  # @param message [Hash] the message to be publish
44
44
  # @param props [Hash] other properties you wish to publish with the message, such as custom headers etc.
45
45
  def publish(event, message, props: {})
46
- session_pool.with { |session| session.publish(event, message, props) }
46
+ if options[:publisher][:session_pool]
47
+ session_pool.with { |session| session.publish(event, message, props) }
48
+ else
49
+ session.publish(event, message, props)
50
+ end
47
51
  disconnect unless options[:publisher][:persistent]
48
52
  end
49
53
 
@@ -90,8 +94,8 @@ module Basquiat
90
94
  # Lazy initializes and return the session pool
91
95
  # @return [ConnectionPool<Session>]
92
96
  def session_pool
93
- @session_pool ||= ConnectionPool.new(size: options[:publisher][:session_pool][:size],
94
- timeout: options[:publisher][:session_pool][:timeout]) do
97
+ @session_pool ||= ConnectionPool.new(size: options[:publisher][:session_pool].fetch(:size, 1),
98
+ timeout: options[:publisher][:session_pool].fetch(:timeout, 5)) do
95
99
  Session.new(connection.create_channel, @configuration.session_options)
96
100
  end
97
101
  end
@@ -32,10 +32,12 @@ module Basquiat
32
32
  # or :development
33
33
  attr_writer :queue_name, :exchange_name, :logger, :environment
34
34
 
35
+ # @!attribute connection - Makes Basquiat to use a provided connection
36
+ # @return [Object] the provided connection
35
37
  # @!attribute rescue_proc
36
38
  # @return [#call] return the callable to be executed when some exception is thrown. The callable receives the
37
39
  # exception and message
38
- attr_accessor :rescue_proc
40
+ attr_accessor :connection, :rescue_proc
39
41
 
40
42
  def queue_name
41
43
  @queue_name || 'basquiat.queue'
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Version file
4
4
  module Basquiat
5
- VERSION = '1.4.0'
5
+ VERSION = '1.5.0'
6
6
  end
@@ -37,6 +37,8 @@ RSpec.describe Basquiat::Adapters::RabbitMq do
37
37
  publisher: { persistent: true, session_pool: { size: 10 } } }
38
38
  end
39
39
 
40
+ before { Basquiat.configure { |c| c.connection = Bunny.new.tap(&:start) } }
41
+
40
42
  it '#publish [enqueue a message 10 times concurrently]' do
41
43
  expect do
42
44
  threads = []
@@ -48,6 +50,8 @@ RSpec.describe Basquiat::Adapters::RabbitMq do
48
50
  threads.each(&:join)
49
51
  end.not_to raise_error
50
52
  end
53
+
54
+ after { Basquiat.configure { |c| c.connection = nil } }
51
55
  end
52
56
  end
53
57
 
@@ -37,6 +37,17 @@ RSpec.describe Basquiat::Configuration do
37
37
  expect(config.exchange_name).to eq('basquiat.exchange')
38
38
  end
39
39
 
40
+ it '#connection' do
41
+ expect(config.connection).to be_nil
42
+ end
43
+
44
+ it '#connection=' do
45
+ connection = spy('connection')
46
+ config.connection = connection
47
+
48
+ expect(config.connection).to eq(connection)
49
+ end
50
+
40
51
  it '#logger' do
41
52
  expect(config.logger).not_to be_nil
42
53
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: basquiat
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcello "mereghost" Rocha
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-07-06 00:00:00.000000000 Z
12
+ date: 2018-07-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler