Class: Karafka::Routing::Builder

Inherits:
Concurrent::Array
  • Object
show all
Defined in:
lib/karafka/routing/builder.rb

Overview

Builder used as a DSL layer for building consumers and telling them which topics to consume

Examples:

Build a simple (most common) route

consumers do
  topic :new_videos do
    consumer NewVideosConsumer
  end
end

Instance Method Summary collapse

Constructor Details

#initializeBuilder

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

#activeArray<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.

Returns:

  • (Array<Karafka::Routing::ConsumerGroup>)

    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

#clearObject

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.

Parameters:

  • block (Proc)

    block with per-topic evaluated defaults

Returns:

  • (Proc)

    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

Note:

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

Examples:

draw do
  topic :xyz do
  end
end

Parameters:

  • block (Proc)

    block we will evaluate within the builder context

Yields:

  • Evaluates provided block in a builder context so we can describe routes

Raises:



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