# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX - License - Identifier: Apache - 2.0 # Purpose # This code example demonstrates how to create a queue in Amazon Simple Queue Service (Amazon SQS). require 'aws-sdk-sqs' require "net/http" require "rest-client" require "json" require 'concurrent' # @param sqs_client [Aws::SQS::Client] An initialized Amazon SQS client. # @param queue_name [String] The name of the queue. # @return [Boolean] true if the queue was created; otherwise, false. # @example # exit 1 unless queue_created?( # Aws::SQS::Client.new(region: 'us-west-2'), # 'my-queue' # ) HEADERS = { 'Content-Type' => 'application/json', 'Accept' => 'application/json' } def queue_created?(sqs_client, queue_name) sqs_client.create_queue(queue_name: queue_name) true rescue StandardError => e puts "Error creating queue: #{e.message}" false end def messages_sent?(sqs_client, queue_url, entries) sqs_client.send_message_batch( queue_url: queue_url, entries: entries ) true rescue StandardError => e puts "Error sending messages: #{e.message}" false end def submit_task(connection_pool, messages, queue_url, sqs_client) connection_pool.post do messages_sent?(sqs_client, queue_url, messages) puts "Messages Sent" end end # Full example call: # Replace us-west-2 with the AWS Region you're using for Amazon SQS. def run_me region = 'us-west-2' queue_name = 'my-queue' sqs_client = Aws::SQS::Client.new(region: region) puts "Creating the queue named '#{queue_name}'..." if queue_created?(sqs_client, queue_name) puts 'Queue created.' else puts 'Queue not created.' end queue_url = sqs_client.get_queue_url(queue_name: queue_name).queue_url messages = Array.new connection_pool = Concurrent::RubyThreadPoolExecutor.new(max_threads: 20, min_threads: 1, max_queue: 100000) 10000.times do |index| puts "hello - #{index} - #{index % 10}" body = { 'MessageType' => 'PROCESS_TRUCK_LOCATION', 'Source' => "#{index} SQS updates", 'Content' => { 'TimeZone' => 'UTC' } } msg = { id: SecureRandom.uuid, message_body: body.to_json } =begin RestClient::Request.execute(:method => :post, :url => "http://localhost:5001/process", :payload => body.to_json, :headers => HEADERS, :timeout => 10, :open_timeout => 5) do |response, request, result| process_http_response response end =end messages.push(msg) if index % 10 == 9 submit_task(connection_pool, messages.clone, queue_url, sqs_client) messages = Array.new end end connection_pool.shutdown connection_pool.wait_for_termination end def process_http_response(response) case response.code when 200 return "OK" else raise "Service did not return 200 OK response. #{response.code}" end end run_me if $PROGRAM_NAME == __FILE__