Class: Karafka::Routing::Builder
- Inherits:
-
Concurrent::Array
- Object
- Concurrent::Array
- Karafka::Routing::Builder
- Defined in:
- lib/karafka/routing/builder.rb
Overview
Builder used as a DSL layer for building consumers and telling them which topics to consume
Instance Method Summary collapse
-
#active ⇒ Array<Karafka::Routing::ConsumerGroup>
Only active consumer groups that we want to use.
-
#clear ⇒ Object
Clears the builder and the draws memory.
-
#defaults(&block) ⇒ Proc
Defaults that should be evaluated per topic.
-
#draw(&block) { ... } ⇒ Object
Used to draw routes for Karafka.
-
#initialize ⇒ Builder
constructor
A new instance of Builder.
Constructor Details
#initialize ⇒ Builder
Returns a new instance of Builder.
18 19 20 21 22 |
# File 'lib/karafka/routing/builder.rb', line 18 def initialize @draws = Concurrent::Array.new @defaults = EMPTY_DEFAULTS super end |
Instance Method Details
#active ⇒ Array<Karafka::Routing::ConsumerGroup>
Returns only active consumer groups that we want to use. Since Karafka supports multi-process setup, we need to be able to pick only those consumer groups that should be active in our given process context.
58 59 60 |
# File 'lib/karafka/routing/builder.rb', line 58 def active select(&:active?) end |
#clear ⇒ Object
Clears the builder and the draws memory
63 64 65 66 67 |
# File 'lib/karafka/routing/builder.rb', line 63 def clear @defaults = EMPTY_DEFAULTS @draws.clear super end |
#defaults(&block) ⇒ Proc
Returns defaults that should be evaluated per topic.
71 72 73 74 75 |
# File 'lib/karafka/routing/builder.rb', line 71 def defaults(&block) return @defaults unless block @defaults = block end |
#draw(&block) { ... } ⇒ Object
After it is done drawing it will store and validate all the routes to make sure that they are correct and that there are no topic/group duplications (this is forbidden)
Used to draw routes for Karafka
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/karafka/routing/builder.rb', line 36 def draw(&block) @draws << block instance_eval(&block) each do |consumer_group| # Validate consumer group settings Contracts::ConsumerGroup.new.validate!(consumer_group.to_h) # and then its topics settings consumer_group.topics.each do |topic| Contracts::Topic.new.validate!(topic.to_h) end # Initialize subscription groups after all the routing is done consumer_group.subscription_groups end end |