nsq-ruby 1.7.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|