Updated

lib / rabbitmq_client.rb

A
108 lines of codes
8 methods
5.4 complexity/method
4 churn
42.81 complexity
0 duplications
# frozen_string_literal: true require 'active_support' require 'bunny' require 'connection_pool' require 'rabbitmq_client/version' require 'rabbitmq_client/lifecycle' require 'rabbitmq_client/plugin' require 'rabbitmq_client/exchange_registry' require 'rabbitmq_client/publisher' # RabbitmqClient Module is used as a clinet library for Rabbitmq # This Module is supporting the following use cases # - Publish events to Rabbitmq server module RabbitmqClient extend ActiveSupport::Autoload include ActiveSupport::Configurable include ActiveSupport::JSON eager_autoload do autoload :LoggerBuilder autoload :PlainLogSubscriber autoload :JsonLogSubscriber autoload :JsonFormatter autoload :TextFormatter autoload :TagsFilter end @exchange_registry = ExchangeRegistry.new # [url] url address of rabbitmq server config_accessor(:rabbitmq_url, instance_accessor: false) do 'amqp://guest:guest@127.0.0.1:5672' end # [logger_configs] configs for teh used logger # logs_format: json, plain # logs_to_stdout: true, false # logs_level: info, debug # logs_filename: logs file name config_accessor(:logger_configs, instance_accessor: false) do { logs_format: 'plain', logs_level: :info, logs_filename: nil, logger: nil } end # default rabbitmq configs # heartbeat_publisher = 0 # session_pool = 1 # session_pool_timeout = 5 config_accessor(:session_params, instance_accessor: false) do { heartbeat_publisher: 0, async_publisher: true, session_pool: 1, session_pool_timeout: 5 } end config_accessor(:plugins, instance_accessor: false) { [] } config_accessor(:global_store, instance_accessor: false) { nil } config_accessor(:whitelist, instance_accessor: false) do ['x-request-id'.to_sym] end class << self def add_exchange(name, type, options = {}) @exchange_registry.add(name, type, options) end def publish(payload, options = {}) publisher.publish(payload, options) end def lifecycle @lifecycle ||= setup_lifecycle end def logger @logger ||= setup_logger end private def setup_logger LoggerBuilder.new(config[:logger_configs]).build_logger end def publisher @publisher ||= init_publisher end def init_publisher Publisher.new(config.merge( exchange_registry: @exchange_registry )) end def setup_lifecycle @lifecycle = Lifecycle.new plugins.each(&:new) @lifecycle end end end