Skip to content

Commit 7e26694

Browse files
committed
Add continuous integration on Heroku
* Remove the Rakefile, it caused build issues. * Loosen the dependency on Active Support, bundler had problems. * Add a consumer/producer pair.
1 parent af5ef2f commit 7e26694

File tree

7 files changed

+150
-8
lines changed

7 files changed

+150
-8
lines changed

.gitignore

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
/.bundle/
22
/.yardoc
3-
/Gemfile.lock
43
/_yardoc/
54
/coverage/
65
/doc/

Gemfile.lock

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
PATH
2+
remote: .
3+
specs:
4+
ruby-kafka (0.3.8)
5+
6+
GEM
7+
remote: https://rubygems.org/
8+
specs:
9+
activesupport (4.2.5)
10+
i18n (~> 0.7)
11+
json (~> 1.7, >= 1.7.7)
12+
minitest (~> 5.1)
13+
thread_safe (~> 0.3, >= 0.3.4)
14+
tzinfo (~> 1.1)
15+
benchmark-perf (0.1.0)
16+
builder (3.2.2)
17+
coderay (1.1.0)
18+
colored (1.2)
19+
diff-lcs (1.2.5)
20+
docker-api (1.25.0)
21+
excon (>= 0.38.0)
22+
json
23+
dogstatsd-ruby (1.6.0)
24+
dotenv (2.1.0)
25+
excon (0.45.4)
26+
i18n (0.7.0)
27+
json (1.8.3)
28+
method_source (0.8.2)
29+
minitest (5.8.3)
30+
pry (0.9.12.6)
31+
coderay (~> 1.0)
32+
method_source (~> 0.8)
33+
slop (~> 3.4)
34+
rake (10.5.0)
35+
rspec (3.4.0)
36+
rspec-core (~> 3.4.0)
37+
rspec-expectations (~> 3.4.0)
38+
rspec-mocks (~> 3.4.0)
39+
rspec-benchmark (0.1.0)
40+
benchmark-perf (~> 0.1.0)
41+
rspec (>= 3.0.0, < 4.0.0)
42+
rspec-core (3.4.1)
43+
rspec-support (~> 3.4.0)
44+
rspec-expectations (3.4.0)
45+
diff-lcs (>= 1.2.0, < 2.0)
46+
rspec-support (~> 3.4.0)
47+
rspec-mocks (3.4.1)
48+
diff-lcs (>= 1.2.0, < 2.0)
49+
rspec-support (~> 3.4.0)
50+
rspec-support (3.4.1)
51+
rspec_junit_formatter (0.2.2)
52+
builder (< 4)
53+
rspec-core (>= 2, < 4, != 2.12.0)
54+
slop (3.6.0)
55+
snappy (0.0.12)
56+
thread_safe (0.3.5)
57+
tzinfo (1.2.2)
58+
thread_safe (~> 0.1)
59+
60+
PLATFORMS
61+
ruby
62+
63+
DEPENDENCIES
64+
activesupport
65+
bundler (>= 1.9.5)
66+
colored
67+
docker-api
68+
dogstatsd-ruby
69+
dotenv
70+
pry
71+
rake (~> 10.0)
72+
rspec
73+
rspec-benchmark
74+
rspec_junit_formatter (= 0.2.2)
75+
ruby-kafka!
76+
snappy
77+
78+
BUNDLED WITH
79+
1.10.6

Procfile

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
producer: bundle exec ruby ci/producer.rb
2+
consumer: bundle exec ruby ci/consumer.rb

Rakefile

-6
This file was deleted.

ci/consumer.rb

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
$LOAD_PATH.unshift(File.expand_path("../../lib", __FILE__))
2+
3+
require "kafka"
4+
5+
logger = Logger.new(STDOUT)
6+
logger.level = Logger::INFO
7+
logger.formatter = -> (_, _, _, msg) { msg }
8+
9+
STDOUT.sync = true
10+
11+
kafka = Kafka.new(
12+
logger: logger,
13+
seed_brokers: ENV.fetch("HEROKU_KAFKA_URL"),
14+
ssl_ca_cert: ENV.fetch("HEROKU_KAFKA_TRUSTED_CERT"),
15+
ssl_client_cert: ENV.fetch("HEROKU_KAFKA_CLIENT_CERT"),
16+
ssl_client_cert_key: ENV.fetch("HEROKU_KAFKA_CLIENT_CERT_KEY"),
17+
)
18+
19+
consumer = kafka.consumer(group_id: "greetings-group")
20+
consumer.subscribe("greetings")
21+
22+
num_messages = 0
23+
24+
trap("TERM") { consumer.stop }
25+
26+
consumer.each_message do |message|
27+
num_messages += 1
28+
29+
if num_messages % 1000 == 0
30+
puts "Processed #{num_messages} messages"
31+
end
32+
end

ci/producer.rb

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
$LOAD_PATH.unshift(File.expand_path("../../lib", __FILE__))
2+
3+
require "kafka"
4+
5+
logger = Logger.new(STDOUT)
6+
logger.level = Logger::INFO
7+
logger.formatter = -> (_, _, _, msg) { msg }
8+
9+
STDOUT.sync = true
10+
11+
kafka = Kafka.new(
12+
logger: logger,
13+
seed_brokers: ENV.fetch("HEROKU_KAFKA_URL"),
14+
ssl_ca_cert: ENV.fetch("HEROKU_KAFKA_TRUSTED_CERT"),
15+
ssl_client_cert: ENV.fetch("HEROKU_KAFKA_CLIENT_CERT"),
16+
ssl_client_cert_key: ENV.fetch("HEROKU_KAFKA_CLIENT_CERT_KEY"),
17+
)
18+
19+
producer = kafka.async_producer(
20+
delivery_interval: 1,
21+
max_queue_size: 5_000,
22+
max_buffer_size: 10_000,
23+
)
24+
25+
num_messages = 0
26+
27+
trap("TERM") { producer.shutdown }
28+
29+
loop do
30+
begin
31+
producer.produce("hello", key: "world", topic: "greetings")
32+
rescue Kafka::BufferOverflow
33+
puts "Buffer overflow, backing off..."
34+
sleep 10
35+
end
36+
end

ruby-kafka.gemspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Gem::Specification.new do |spec|
3434
spec.add_development_dependency "dotenv"
3535
spec.add_development_dependency "docker-api"
3636
spec.add_development_dependency "rspec-benchmark"
37-
spec.add_development_dependency "activesupport", ">= 4.2.0", "< 5.1"
37+
spec.add_development_dependency "activesupport"
3838
spec.add_development_dependency "snappy"
3939
spec.add_development_dependency "colored"
4040
spec.add_development_dependency "rspec_junit_formatter", "0.2.2"

0 commit comments

Comments
 (0)