Sha256: 89973a04ab21a3e01771dcd44a607ade289907c59e1197fab4d9ce0d6f2a2fde
Contents?: true
Size: 1.43 KB
Versions: 6
Compression:
Stored size: 1.43 KB
Contents
# frozen_string_literal: true require 'aws-sdk-sns' require 'json' module HermesMessengerOfTheGods module Endpoints class Sns < Base def sns_client HermesMessengerOfTheGods.configuration.sns_client end def to_transmit_payload(message, raw_message, dispatch_options = {}) pub_opts = fetch_option(:publish_options, raw_message) || {} message = JSON.dump(message) if options[:jsonify] pub_opts.merge(dispatch_options, message: message) end def transmit(payload) bulk_transmit([payload]) end def bulk_transmit(payloads) # Batch Publish requires a message id, so we'll generate one if it's not set all_publish_batch_request_entries = payloads.map do |payload| {id: SecureRandom.uuid}.merge(payload) end failed_msgs = [] all_publish_batch_request_entries.each_slice(10) do |publish_batch_request_entries| resp = sns_client.publish_batch(topic_arn: endpoint, publish_batch_request_entries: publish_batch_request_entries) failed_msgs.concat(resp.failed) end if failed_msgs.any? all_sender_fault = failed_msgs.all?(&:sender_fault) raise FatalError, "Error in dispatching: #{failed_msgs[0].message}" if all_sender_fault raise "Some messages failed to send due to recoverable error #{failed_msgs[0].message}" end true end end end end
Version data entries
6 entries across 6 versions & 1 rubygems