Class: SharedBroker::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/shared_broker.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(adapter:, circuit_breaker: nil) ⇒ Client

Returns a new instance of Client.



25
26
27
28
29
30
31
32
# File 'lib/shared_broker.rb', line 25

def initialize(adapter:, circuit_breaker: nil)
  unless adapter.respond_to?(:publish) && adapter.respond_to?(:subscribe)
    raise ArgumentError, "Expected adapter to respond to :publish and :subscribe, got #{adapter.class} with value #{adapter.inspect}"
  end

  @adapter = adapter
  @circuit_breaker = circuit_breaker || CircuitBreaker.new
end

Instance Attribute Details

#circuit_breakerObject (readonly)

Returns the value of attribute circuit_breaker.



23
24
25
# File 'lib/shared_broker.rb', line 23

def circuit_breaker
  @circuit_breaker
end

Instance Method Details

#publish(topic, message, correlation_id: nil) ⇒ Object



34
35
36
37
38
39
40
41
# File 'lib/shared_broker.rb', line 34

def publish(topic, message, correlation_id: nil)
  SharedBroker::Validation.validate!(topic, message)
  encrypted_msg = SharedBroker::Cipher.encrypt(message, SharedBroker.encryption_key)

  @circuit_breaker.run do
    @adapter.publish(topic, encrypted_msg, correlation_id: correlation_id)
  end
end

#subscribe(topic, queue_name, max_retries: 3, backoff_base: 2, &block) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/shared_broker.rb', line 43

def subscribe(topic, queue_name, max_retries: 3, backoff_base: 2, &block)
  @adapter.subscribe(topic, queue_name, max_retries: max_retries, backoff_base: backoff_base) do |raw_message|
    decrypted_msg = SharedBroker::Cipher.decrypt(raw_message, SharedBroker.encryption_key)
    SharedBroker::Validation.validate!(topic, decrypted_msg)
    block.call(decrypted_msg)
  end
end