nsq-ruby 1.7.0 → 2.0.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 +4 -4
- data/README.md +21 -8
- data/lib/nsq/client_base.rb +3 -1
- data/lib/nsq/connection.rb +33 -14
- data/lib/nsq/consumer.rb +2 -0
- data/lib/nsq/producer.rb +2 -0
- data/lib/version.rb +2 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6cbb0662845f5a7d8080d9531d9238fe12b8f87e
|
4
|
+
data.tar.gz: 105520f8192afccdba5097cae209ac36d1ec09e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b4038559f24a0923af28a5e9c0281f32f09850b3970b07c52abd587d66dd119d912686408f91e92c77d376c5565d73a8bfcf3c9f391bacde6e22ce550f10d0b
|
7
|
+
data.tar.gz: d0425623eb3cf5733e5b10bc2ab40bb377c9fa4e5ecf9509e5ea88d4006f64211cda36821165b696ab7b58fb139c6aa39ceb12001229f92fd1e5d8e0f5296895
|
data/README.md
CHANGED
@@ -68,8 +68,9 @@ The Nsq::Producer constructor takes the following options:
|
|
68
68
|
|---------------|----------------------------------------|--------------------|
|
69
69
|
| `topic` | Topic to which to publish messages | |
|
70
70
|
| `nsqd` | Host and port of the nsqd instance | '127.0.0.1:4150' |
|
71
|
-
| `nsqlookupd` | Use lookupd to
|
72
|
-
| `
|
71
|
+
| `nsqlookupd` | Use lookupd to auto discover nsqds | |
|
72
|
+
| `tls_v1` | Flag for tls v1 connections | false |
|
73
|
+
| `tls_options` | Optional keys+certs for TLS connections| |
|
73
74
|
|
74
75
|
For example, if you'd like to publish messages to a single nsqd.
|
75
76
|
|
@@ -92,19 +93,29 @@ producer = Nsq::Producer.new(
|
|
92
93
|
)
|
93
94
|
```
|
94
95
|
|
95
|
-
If you need to connect using SSL/TLS
|
96
|
+
If you need to connect using SSL/TLS Authentication via `tls_options`
|
96
97
|
|
97
98
|
```Ruby
|
98
99
|
producer = Nsq::Producer.new(
|
99
100
|
nsqlookupd: ['1.2.3.4:4161', '6.7.8.9:4161'],
|
100
101
|
topic: 'topic-of-great-esteem',
|
101
|
-
|
102
|
+
tls_v1: true,
|
103
|
+
tls_options: {
|
102
104
|
key: '/path/to/ssl/key.pem',
|
103
105
|
certificate: '/path/to/ssl/certificate.pem'
|
104
106
|
}
|
105
107
|
)
|
106
108
|
```
|
107
109
|
|
110
|
+
If you need to connect using simple `tls_v1`
|
111
|
+
|
112
|
+
```Ruby
|
113
|
+
producer = Nsq::Producer.new(
|
114
|
+
nsqlookupd: ['1.2.3.4:4161', '6.7.8.9:4161'],
|
115
|
+
topic: 'topic-of-great-esteem',
|
116
|
+
tls_v1: true
|
117
|
+
)
|
118
|
+
```
|
108
119
|
|
109
120
|
### `#write`
|
110
121
|
|
@@ -170,9 +181,10 @@ producers when you're done with them.
|
|
170
181
|
| `nsqlookupd` | Use lookupd to automatically discover nsqds | |
|
171
182
|
| `nsqd` | Connect directly to a single nsqd instance | '127.0.0.1:4150' |
|
172
183
|
| `max_in_flight` | Max number of messages for this consumer to have in flight at a time | 1 |
|
173
|
-
| `discovery_interval` | Seconds between queue discovery via nsqlookupd | 60.0
|
174
|
-
| `msg_timeout` | Milliseconds before nsqd will timeout a message | 60000
|
175
|
-
| `
|
184
|
+
| `discovery_interval` | Seconds between queue discovery via nsqlookupd | 60.0 |
|
185
|
+
| `msg_timeout` | Milliseconds before nsqd will timeout a message | 60000 |
|
186
|
+
| `tls_v1` | Flag for tls v1 connections | false |
|
187
|
+
| `tls_options` | Optional keys and certificates for TLS connections | |
|
176
188
|
|
177
189
|
|
178
190
|
For example:
|
@@ -185,7 +197,8 @@ consumer = Nsq::Consumer.new(
|
|
185
197
|
max_in_flight: 100,
|
186
198
|
discovery_interval: 30,
|
187
199
|
msg_timeout: 120_000,
|
188
|
-
|
200
|
+
tls_v1: true,
|
201
|
+
tls_options: {
|
189
202
|
key: '/path/to/ssl/key.pem',
|
190
203
|
certificate: '/path/to/ssl/certificate.pem'
|
191
204
|
}
|
data/lib/nsq/client_base.rb
CHANGED
data/lib/nsq/connection.rb
CHANGED
@@ -31,8 +31,24 @@ module Nsq
|
|
31
31
|
@channel = opts[:channel]
|
32
32
|
@msg_timeout = opts[:msg_timeout] || 60_000 # 60s
|
33
33
|
@max_in_flight = opts[:max_in_flight] || 1
|
34
|
-
@
|
35
|
-
|
34
|
+
@tls_options = opts[:tls_options]
|
35
|
+
if opts[:ssl_context]
|
36
|
+
if @tls_options
|
37
|
+
warn 'ssl_context and tls_options both set. Using tls_options. Ignoring ssl_context.'
|
38
|
+
else
|
39
|
+
@tls_options = opts[:ssl_context]
|
40
|
+
warn 'ssl_context will be deprecated nsq-ruby version 3. Please use tls_options instead.'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
@tls_v1 = !!opts[:tls_v1]
|
44
|
+
|
45
|
+
if @tls_options
|
46
|
+
if @tls_v1
|
47
|
+
validate_tls_options!
|
48
|
+
else
|
49
|
+
warn 'tls_options was provided, but tls_v1 is false. Skipping validation of tls_options.'
|
50
|
+
end
|
51
|
+
end
|
36
52
|
|
37
53
|
if @msg_timeout < 1000
|
38
54
|
raise ArgumentError, 'msg_timeout cannot be less than 1000. it\'s in milliseconds.'
|
@@ -152,7 +168,7 @@ module Nsq
|
|
152
168
|
heartbeat_interval: 30_000, # 30 seconds
|
153
169
|
output_buffer: 16_000, # 16kb
|
154
170
|
output_buffer_timeout: 250, # 250ms
|
155
|
-
tls_v1:
|
171
|
+
tls_v1: @tls_v1,
|
156
172
|
snappy: false,
|
157
173
|
deflate: false,
|
158
174
|
sample_rate: 0, # disable sampling
|
@@ -320,7 +336,7 @@ module Nsq
|
|
320
336
|
# it gets to nsqd ahead of anything in the `@write_queue`
|
321
337
|
write_to_socket ' V2'
|
322
338
|
identify
|
323
|
-
upgrade_to_ssl_socket if @
|
339
|
+
upgrade_to_ssl_socket if @tls_v1
|
324
340
|
|
325
341
|
start_read_loop
|
326
342
|
start_write_loop
|
@@ -354,17 +370,20 @@ module Nsq
|
|
354
370
|
|
355
371
|
|
356
372
|
def upgrade_to_ssl_socket
|
357
|
-
|
373
|
+
ssl_opts = [@socket, openssl_context].compact
|
374
|
+
@socket = OpenSSL::SSL::SSLSocket.new(*ssl_opts)
|
358
375
|
@socket.connect
|
359
376
|
end
|
360
377
|
|
361
378
|
|
362
379
|
def openssl_context
|
380
|
+
return unless @tls_options
|
381
|
+
|
363
382
|
context = OpenSSL::SSL::SSLContext.new
|
364
|
-
context.cert = OpenSSL::X509::Certificate.new(File.open(@
|
365
|
-
context.key = OpenSSL::PKey::RSA.new(File.open(@
|
366
|
-
if @
|
367
|
-
context.ca_file = OpenSSL::X509::Certificate.new(File.open(@
|
383
|
+
context.cert = OpenSSL::X509::Certificate.new(File.open(@tls_options[:certificate]))
|
384
|
+
context.key = OpenSSL::PKey::RSA.new(File.open(@tls_options[:key]))
|
385
|
+
if @tls_options[:ca_certificate]
|
386
|
+
context.ca_file = OpenSSL::X509::Certificate.new(File.open(@tls_options[:ca_certificate])).to_pem
|
368
387
|
end
|
369
388
|
context
|
370
389
|
end
|
@@ -422,16 +441,16 @@ module Nsq
|
|
422
441
|
end
|
423
442
|
|
424
443
|
|
425
|
-
def
|
444
|
+
def validate_tls_options!
|
426
445
|
[:key, :certificate].each do |key|
|
427
|
-
unless @
|
428
|
-
raise ArgumentError.new "
|
446
|
+
unless @tls_options.has_key?(key)
|
447
|
+
raise ArgumentError.new "@tls_options requires a :#{key}"
|
429
448
|
end
|
430
449
|
end
|
431
450
|
|
432
451
|
[:key, :certificate, :ca_certificate].each do |key|
|
433
|
-
if @
|
434
|
-
raise LoadError.new "
|
452
|
+
if @tls_options[key] && !File.readable?(@tls_options[key])
|
453
|
+
raise LoadError.new "@tls_options :#{key} is unreadable"
|
435
454
|
end
|
436
455
|
end
|
437
456
|
end
|
data/lib/nsq/consumer.rb
CHANGED
@@ -18,6 +18,8 @@ module Nsq
|
|
18
18
|
@discovery_interval = opts[:discovery_interval] || 60
|
19
19
|
@msg_timeout = opts[:msg_timeout]
|
20
20
|
@ssl_context = opts[:ssl_context]
|
21
|
+
@tls_options = opts[:tls_options]
|
22
|
+
@tls_v1 = opts[:tls_v1]
|
21
23
|
|
22
24
|
# This is where we queue up the messages we receive from each connection
|
23
25
|
@messages = opts[:queue] || Queue.new
|
data/lib/nsq/producer.rb
CHANGED
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nsq-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wistia
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
109
|
version: '0'
|
110
110
|
requirements: []
|
111
111
|
rubyforge_project:
|
112
|
-
rubygems_version: 2.
|
112
|
+
rubygems_version: 2.5.1
|
113
113
|
signing_key:
|
114
114
|
specification_version: 4
|
115
115
|
summary: Ruby client library for NSQ
|