Sha256: 61df3f1b56b51bcf05832daf41f52f531e134c73dd92b0d0b25300b047cfdf15

Contents?: true

Size: 1.04 KB

Versions: 4

Compression:

Stored size: 1.04 KB

Contents

# frozen_string_literal: true

module Totoro
  class EnqueueService
    def initialize(connection, config)
      @connection = connection
      @config = config
    end

    def enqueue(id, payload)
      @connection.start unless @connection.connected?
      queue = channel.queue(*@config.queue(id))
      payload = JSON.dump payload
      exchange.publish(payload, routing_key: queue.name)
      Rails.logger.debug "send message to #{queue.name}"
      STDOUT.flush
      channel.close
    rescue Bunny::TCPConnectionFailedForAllHosts,
           Bunny::NetworkErrorWrapper,
           Bunny::ChannelAlreadyClosed,
           Bunny::ConnectionAlreadyClosed,
           AMQ::Protocol::EmptyResponseError => error
      @channel.close if @channel.present?
      raise(Totoro::ConnectionBreakError, "type: #{error.class}, message: #{error.message}")
    end

    private

    def channel
      @channel ||= @connection.create_channel
    end

    # default exchange is a direct exchange
    def exchange
      @exchange ||= channel.default_exchange
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
totoro-1.0.6 pkg/totoro-1.0.5/lib/totoro/services/enqueue_service.rb
totoro-1.0.5 lib/totoro/services/enqueue_service.rb
totoro-1.0.4 lib/totoro/services/enqueue_service.rb
totoro-1.0.3 lib/totoro/services/enqueue_service.rb