Class: Freddy::Producers::SendAndForgetProducer

Inherits:
Object
  • Object
show all
Defined in:
lib/freddy/producers/send_and_forget_producer.rb

Constant Summary collapse

CONTENT_TYPE =
'application/json'

Instance Method Summary collapse

Constructor Details

#initialize(channel, logger) ⇒ SendAndForgetProducer



8
9
10
11
12
# File 'lib/freddy/producers/send_and_forget_producer.rb', line 8

def initialize(channel, logger)
  @logger = logger
  @exchange = channel.default_exchange
  @topic_exchange = channel.topic Freddy::FREDDY_TOPIC_EXCHANGE_NAME
end

Instance Method Details

#produce(routing_key, payload, properties) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/freddy/producers/send_and_forget_producer.rb', line 14

def produce(routing_key, payload, properties)
  span = Tracing.span_for_produce(@topic_exchange, routing_key, payload)

  properties = properties.merge(
    routing_key: routing_key,
    content_type: CONTENT_TYPE
  )
  Tracing.inject_tracing_information_to_properties!(properties)

  json_payload = Freddy::Encoding.compress(
    Payload.dump(payload),
    properties[:content_encoding]
  )

  # Connection adapters handle thread safety for #publish themselves. No
  # need to lock these.
  @topic_exchange.publish json_payload, properties.dup
  @exchange.publish json_payload, properties.dup
ensure
  # We don't know how many listeners there are and we do not know when
  # this message gets processed. Instead we close the span immediately.
  span.finish
end