basic proxy and consumer done
This commit is contained in:
		
							
								
								
									
										1
									
								
								consumer/.ruby-gemset
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								consumer/.ruby-gemset
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
bettermail_consumer
 | 
			
		||||
							
								
								
									
										1
									
								
								consumer/.ruby-version
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								consumer/.ruby-version
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
ruby-2.7.2
 | 
			
		||||
@@ -1,15 +1,6 @@
 | 
			
		||||
source 'https://rubygems.org'
 | 
			
		||||
ruby '2.6.5'
 | 
			
		||||
gem 'dotenv-rails'
 | 
			
		||||
 | 
			
		||||
# Reduces boot times through caching; required in config/boot.rb
 | 
			
		||||
gem 'bootsnap', '>= 1.4.2', require: false
 | 
			
		||||
 | 
			
		||||
group :development do
 | 
			
		||||
  gem 'web-console', '>= 3.3.0'
 | 
			
		||||
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
 | 
			
		||||
  gem 'spring'
 | 
			
		||||
  gem 'spring-watcher-listen', '~> 2.0.0'
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
ruby '2.7.2'
 | 
			
		||||
gem 'dotenv'
 | 
			
		||||
gem 'bunny'
 | 
			
		||||
gem 'mail'
 | 
			
		||||
gem 'pg'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										32
									
								
								consumer/Gemfile.lock
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								consumer/Gemfile.lock
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
GEM
 | 
			
		||||
  remote: https://rubygems.org/
 | 
			
		||||
  specs:
 | 
			
		||||
    amq-protocol (2.3.2)
 | 
			
		||||
    bunny (2.19.0)
 | 
			
		||||
      amq-protocol (~> 2.3, >= 2.3.1)
 | 
			
		||||
      sorted_set (~> 1, >= 1.0.2)
 | 
			
		||||
    dotenv (2.8.1)
 | 
			
		||||
    mail (2.7.1)
 | 
			
		||||
      mini_mime (>= 0.1.1)
 | 
			
		||||
    mini_mime (1.1.2)
 | 
			
		||||
    pg (1.4.4)
 | 
			
		||||
    rbtree (0.4.5)
 | 
			
		||||
    set (1.0.3)
 | 
			
		||||
    sorted_set (1.0.3)
 | 
			
		||||
      rbtree
 | 
			
		||||
      set (~> 1.0)
 | 
			
		||||
 | 
			
		||||
PLATFORMS
 | 
			
		||||
  ruby
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES
 | 
			
		||||
  bunny
 | 
			
		||||
  dotenv
 | 
			
		||||
  mail
 | 
			
		||||
  pg
 | 
			
		||||
 | 
			
		||||
RUBY VERSION
 | 
			
		||||
   ruby 2.7.2p137
 | 
			
		||||
 | 
			
		||||
BUNDLED WITH
 | 
			
		||||
   2.1.4
 | 
			
		||||
							
								
								
									
										88
									
								
								consumer/bettermail_consumer.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								consumer/bettermail_consumer.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require 'dotenv/load'
 | 
			
		||||
require 'pg'
 | 
			
		||||
require 'mail'
 | 
			
		||||
require 'bunny'
 | 
			
		||||
 | 
			
		||||
# Server class
 | 
			
		||||
class BettermailConsumer
 | 
			
		||||
  def initialize
 | 
			
		||||
    @pg = PG::Connection.new(ENV['DATABASE_URL'])
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def start
 | 
			
		||||
    begin
 | 
			
		||||
      puts ' [*] Waiting for messages. To exit press CTRL+C'
 | 
			
		||||
      mail_queue = bunny_channel.queue(ENV['RABBIT_MAIL_QUEUE'])
 | 
			
		||||
      mail_queue.subscribe(block: true) do |_delivery_info, _properties, body|
 | 
			
		||||
        mail = Mail.read_from_string(body)
 | 
			
		||||
        puts mail
 | 
			
		||||
      end
 | 
			
		||||
      sns_queue = bunny_channel.queue(ENV['RABBIT_SNS_QUEUE'])
 | 
			
		||||
      sns_queue.subscribe(block: true) do |_delivery_info, _properties, body|
 | 
			
		||||
        puts " [x] Received #{_delivery_info}"
 | 
			
		||||
      end
 | 
			
		||||
    rescue Interrupt => _
 | 
			
		||||
      stop
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def stop
 | 
			
		||||
    @bunny_conn&.close
 | 
			
		||||
    @pg&.close
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def bunny_channel
 | 
			
		||||
    if @bunny_channel.nil?
 | 
			
		||||
      @bunny_conn = Bunny.new
 | 
			
		||||
      @bunny_conn.start
 | 
			
		||||
      @bunny_channel = @bunny_conn.create_channel
 | 
			
		||||
    end
 | 
			
		||||
    @bunny_channel
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
service_name='BetterMail::Consumer'
 | 
			
		||||
# Create a new server instance for listening at localhost interfaces 127.0.0.1:2525
 | 
			
		||||
# and accepting a maximum of 4 simultaneous connections per default
 | 
			
		||||
service = BettermailConsumer.new
 | 
			
		||||
 | 
			
		||||
# save flag for Ctrl-C pressed
 | 
			
		||||
flag_status_ctrl_c_pressed = false
 | 
			
		||||
 | 
			
		||||
# try to gracefully shutdown on Ctrl-C
 | 
			
		||||
trap('INT') do
 | 
			
		||||
  # print an empty line right after ^C
 | 
			
		||||
  puts
 | 
			
		||||
  # notify flag about Ctrl-C was pressed
 | 
			
		||||
  flag_status_ctrl_c_pressed = true
 | 
			
		||||
  # signal exit to app
 | 
			
		||||
  exit 0
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
# Output for debug
 | 
			
		||||
puts("Starting #{service_name}")
 | 
			
		||||
 | 
			
		||||
# setup exit code
 | 
			
		||||
at_exit do
 | 
			
		||||
  # check to shutdown connection
 | 
			
		||||
  if service
 | 
			
		||||
    # Output for debug
 | 
			
		||||
    puts('Ctrl-C interrupted, exit now...') if flag_status_ctrl_c_pressed
 | 
			
		||||
    # info about shutdown
 | 
			
		||||
    puts("Shutdown #{service_name}...")
 | 
			
		||||
    # stop all threads and connections gracefully
 | 
			
		||||
    service.stop
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Output for debug
 | 
			
		||||
  puts "#{service_name} stopped!"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
# Start the server
 | 
			
		||||
service.start
 | 
			
		||||
 | 
			
		||||
# Run on server forever
 | 
			
		||||
service.join
 | 
			
		||||
							
								
								
									
										1
									
								
								consumer/start.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								consumer/start.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
ruby ./bettermail_consumer.rb
 | 
			
		||||
		Reference in New Issue
	
	Block a user