class Poseidon::MessagesToSendBatch

A batch of messages for an individual send attempt to the cluster. @api private

Public Class Methods

new(messages, message_conductor) click to toggle source
# File lib/poseidon/messages_to_send_batch.rb, line 5
def initialize(messages, message_conductor)
  @messages           = messages
  @message_conductor  = message_conductor
end

Public Instance Methods

messages_for_brokers() click to toggle source

Groups messages by broker and preps them for transmission.

@return [Array<MessagesForBroker>]

# File lib/poseidon/messages_to_send_batch.rb, line 13
def messages_for_brokers
  messages_for_broker_ids = {}
  @messages.each do |message|
    partition_id, broker_id = @message_conductor.destination(message.topic,
                                                             message.key)

    # Create a nested hash to group messages by broker_id, topic, partition.
    messages_for_broker_ids[broker_id] ||= MessagesForBroker.new(broker_id)
    messages_for_broker_ids[broker_id].add(message, partition_id)
  end

  messages_for_broker_ids.values
end