From 62e9c65c2054c8debea6654acaeaa9f47a2174f6 Mon Sep 17 00:00:00 2001 From: Lukas Eklund Date: Fri, 4 Mar 2022 12:33:37 -0600 Subject: [PATCH] add FastlyNsq.consumer_nsqds and FastlyNsq.producer_nsqds This commit does adds support for adding these to the FastlyNsq module but does not use them in the messenger and producer classes --- .env | 4 +-- README.md | 4 +-- lib/fastly_nsq.rb | 39 +++++++++++++++++++++- spec/fastly_nsq_spec.rb | 74 ++++++++++++++++++++++++++++++++++++++++- 4 files changed, 115 insertions(+), 6 deletions(-) diff --git a/.env b/.env index 887dc5e..b070d44 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ -NSQD_TCP_ADDRESS=127.0.0.1:4150 NSQD_HTTP_ADDRESS=127.0.0.1:4151 -NSQLOOKUPD_TCP_ADDRESS=127.0.0.1:4160 NSQLOOKUPD_HTTP_ADDRESS=127.0.0.1:4161 +NSQD_CONSUMERS=127.0.0.1:4150 +NSQD_PRODUCERS=127.0.0.1:4150 diff --git a/README.md b/README.md index 69ffd74..2d2201a 100644 --- a/README.md +++ b/README.md @@ -293,10 +293,10 @@ stock NSQ on OS X, installed via Homebrew: ```shell -NSQD_TCP_ADDRESS='127.0.0.1:4150' NSQD_HTTP_ADDRESS='127.0.0.1:4151' -NSQLOOKUPD_TCP_ADDRESS='127.0.0.1:4160' NSQLOOKUPD_HTTP_ADDRESS='127.0.0.1:4161, 10.1.1.101:4161' +NSQD_CONSUMERS='127.0.0.1:4150' +NSQD_PRODUCERS='127.0.0.1:4150' ``` See the [`.sample.env`](examples/.sample.env) file diff --git a/lib/fastly_nsq.rb b/lib/fastly_nsq.rb index 709c13e..3b52789 100644 --- a/lib/fastly_nsq.rb +++ b/lib/fastly_nsq.rb @@ -126,7 +126,44 @@ def max_processing_pool_threads # Return an array of NSQ lookupd http addresses sourced from ENV['NSQLOOKUPD_HTTP_ADDRESS'] # @return [Array] list of nsqlookupd http addresses def lookupd_http_addresses - ENV.fetch("NSQLOOKUPD_HTTP_ADDRESS").split(",").map(&:strip) + @lookups ||= ENV.fetch("NSQLOOKUPD_HTTP_ADDRESS").split(",").map(&:strip) + end + + ## + # Set the lookupd_http_addresses + # @param lookups [Array] List of http lookupd addresses to use. + def lookupd_http_addresses=(lookups) + @lookups = Array(lookups) + end + + ## + # Return an array of NSQD TCP addresses for NSQ consumers. Defaults to the value of ENV['NSQD_CONSUMERS']. + # ENV['NSQD_CONSUMERS'] must be a comma or space seperated string of NSQD addresses + # @return [Array] list of nsqd addresses + def consumer_nsqds + @consumer_nsqds ||= ENV.fetch("NSQD_CONSUMERS").split(/, ?|\s+/).map(&:strip) + end + + ## + # Set the consumer_nsqd addresses + # @param nsqd_addresses [Array] List of consumer nsqd addresses to use + def consumer_nsqds=(nsqd_addresses) + @consumer_nsqds = Array(nsqd_addresses) + end + + ## + # Return an array of NSQD TCP addresses for NSQ producers. Defaults to the value of ENV['NSQD_PRODUCERS']. + # ENV['NSQD_PRODUCERS'] must be a comma or space seperated string of NSQD addresses + # @return [Array] list of nsqd addresses + def producer_nsqds + @producer_nsqds ||= ENV.fetch("NSQD_PRODUCERS").split(/, ?|\s+/).map(&:strip) + end + + ## + # Set the producer_nsqd addresses + # @param nsqd_addresses [Array] List of producer nsqd addresses to use + def producer_nsqds=(nsqd_addresses) + @producer_nsqds = Array(nsqd_addresses) end # Register a block to run at a point in the lifecycle. diff --git a/spec/fastly_nsq_spec.rb b/spec/fastly_nsq_spec.rb index 3819872..f849ba8 100644 --- a/spec/fastly_nsq_spec.rb +++ b/spec/fastly_nsq_spec.rb @@ -94,9 +94,81 @@ end describe "#lookupd_http_addresses" do - it "retreives NSQLOOKUPD_HTTP_ADDRESS" do + after { subject.instance_variable_set(:@lookups, nil) } + + it "retreives NSQLOOKUPD_HTTP_ADDRESS by default" do expect(subject.lookupd_http_addresses).to eq(ENV["NSQLOOKUPD_HTTP_ADDRESS"].split(",")) end + + it "returns the value of the instance variable" do + subject.instance_variable_set(:@lookups, ["lolcathost"]) + + expect(subject.lookupd_http_addresses).to eq(["lolcathost"]) + end + end + + describe "#lookupd_http_addresses=" do + let!(:default_loookups) { subject.lookupd_http_addresses } + after { subject.lookupd_http_addresses = default_loookups } + + it "allows the lookups to be set and retrieved" do + lookups = ["lolcathost:1234"] + subject.lookupd_http_addresses = lookups + + expect(subject.lookupd_http_addresses).to eq lookups + end + end + + describe "#producer_nsqds" do + after { subject.instance_variable_set(:@producer_nsqds, nil) } + + it "retreives NSQD_PRODUCERS by default" do + expect(subject.producer_nsqds).to eq(ENV["NSQD_PRODUCERS"].split(",")) + end + + it "returns the value of the instance variable" do + subject.instance_variable_set(:@producer_nsqds, ["producer:1234"]) + + expect(subject.producer_nsqds).to eq(["producer:1234"]) + end + end + + describe "#producer_nsqds=" do + let!(:default_producers) { subject.producer_nsqds } + after { subject.producer_nsqds = default_producers } + + it "allows the producer_nsqds to be set and retrieved" do + producers = ["producer:1234"] + subject.producer_nsqds = producers + + expect(subject.producer_nsqds).to eq producers + end + end + + describe "#consumer_nsqds" do + after { subject.instance_variable_set(:@consumer_nsqds, nil) } + + it "retreives NSQD_CONSUMERS by default" do + expect(subject.consumer_nsqds).to eq(ENV["NSQD_CONSUMERS"].split(",")) + end + + it "returns the value of the instance variable" do + subject.instance_variable_set(:@consumer_nsqds, ["consumer:1234"]) + + expect(subject.consumer_nsqds).to eq(["consumer:1234"]) + end + end + + describe "#consumer_nsqds=" do + let!(:default_consumers) { subject.consumer_nsqds } + after { subject.consumer_nsqds = default_consumers } + + it "allows the consumer_nsqds to be set and retrieved" do + consumers = ["consumer:1234"] + subject.consumer_nsqds = consumers + + expect(subject.consumer_nsqds).to eq consumers + end end describe "#on" do