Sha256: 651bfddc96039a4be6edaf2da7cf9ed470d4c4baa349f7eff92993ed5db90c11

Contents?: true

Size: 1.07 KB

Versions: 7

Compression:

Stored size: 1.07 KB

Contents

# frozen_string_literal: true

require 'singleton'

module RailwayIpc
  # RabbitMQ connection manager. Ensures there is a single RabbitMQ
  # connection and channel per thread, which prevents channel leaks.
  #
  class ConnectionManager
    include Singleton

    def initialize
      establish_connection
    end

    def establish_connection
      @connection = Bunny.new(
        host: settings[:host],
        user: settings[:user],
        pass: settings[:pass],
        port: settings[:port],
        vhost: settings[:vhost] || '/',
        logger: RailwayIpc.logger
      )
      @connection.start
      @channel = @connection.create_channel

      @connection
    end

    def channel
      return @channel if connected?

      establish_connection
      @channel
    end

    def connected?
      @connection&.connected? && @channel&.open?
    end

    private

    def amqp_url
      @amqp_url ||= ENV.fetch('RAILWAY_RABBITMQ_CONNECTION_URL', 'amqp://guest:guest@localhost:5672')
    end

    def settings
      @settings ||= AMQ::Settings.parse_amqp_url(amqp_url)
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
railway-ipc-5.1.1 lib/railway_ipc/connection_manager.rb
railway-ipc-5.1.0 lib/railway_ipc/connection_manager.rb
railway-ipc-5.0.0 lib/railway_ipc/connection_manager.rb
railway-ipc-4.0.1 lib/railway_ipc/connection_manager.rb
railway-ipc-4.0.0 lib/railway_ipc/connection_manager.rb
railway-ipc-3.0.0 lib/railway_ipc/connection_manager.rb
railway-ipc-2.2.2 lib/railway_ipc/connection_manager.rb