Module: Karafka::Pro::Routing::Features::Throttling::Topic

Defined in:
lib/karafka/pro/routing/features/throttling/topic.rb

Overview

Topic throttling API extensions

Instance Method Summary collapse

Instance Method Details

#initializeObject

This method calls the parent class initializer and then sets up the extra instance variable to nil. The explicit initialization to nil is included as an optimization for Ruby’s object shapes system, which improves memory layout and access performance.



34
35
36
37
# File 'lib/karafka/pro/routing/features/throttling/topic.rb', line 34

def initialize(...)
  super
  @throttling = nil
end

#throttle(**args) ⇒ Object

Just an alias for nice API

Parameters:

  • args (Hash)

    Anything #throttling accepts

Options Hash (**args):

  • :limit (Integer)

    max messages to process in a time interval

  • :interval (Integer)

    time interval for processing in milliseconds



69
70
71
# File 'lib/karafka/pro/routing/features/throttling/topic.rb', line 69

def throttle(**args)
  throttling(**args)
end

#throttling(limit: Float::INFINITY, interval: 60_000) ⇒ Object

Parameters:

  • limit (Integer) (defaults to: Float::INFINITY)

    max messages to process in an time interval

  • interval (Integer) (defaults to: 60_000)

    time interval for processing



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/karafka/pro/routing/features/throttling/topic.rb', line 41

def throttling(
  limit: Float::INFINITY,
  interval: 60_000
)
  # Those settings are used for validation
  @throttling ||= begin
    config = Config.new(
      active: limit != Float::INFINITY,
      limit: limit,
      interval: interval
    )

    # If someone defined throttling setup, we need to create appropriate filter for it
    # and inject it via filtering feature
    if config.active?
      factory = ->(*) { Pro::Processing::Filters::Throttler.new(limit, interval) }
      filter(factory)
    end

    config
  end
end

#throttling?Boolean

Returns is a given job throttled.

Returns:

  • (Boolean)

    is a given job throttled



74
75
76
# File 'lib/karafka/pro/routing/features/throttling/topic.rb', line 74

def throttling?
  throttling.active?
end

#to_hHash

Returns topic with all its native configuration options plus throttling.

Returns:

  • (Hash)

    topic with all its native configuration options plus throttling



79
80
81
82
83
# File 'lib/karafka/pro/routing/features/throttling/topic.rb', line 79

def to_h
  super.merge(
    throttling: throttling.to_h
  ).freeze
end