Envio de e-mails em segundo plano com o Iron

Quase sempre você deseja enviar emails para seus usuários em um processo em segundo plano. O usuário final não deve ter que esperar até que o sistema faça uma solicitação ao provedor de e-mail, faça um handshake e, em seguida, aguarde a conclusão do envio do e-mail. Esta é uma maneira rápida e inteligente de enviar e-mails via Sendgrid para seus usuários usando o produto Iron’s Worker usando Ruby. Como o Worker é baseado em Docker, você pode usar qualquer linguagem de programação que desejar. Esse é um dos benefícios de usar o Iron em comparação com outros sistemas de trabalho em segundo plano.

Em um novo diretório, crie um Gemfile com o seguinte:

source 'https://rubygems.org'
gem
'sendgrid-ruby'
gem
'iron_worker', '>= 3.0.0'

Crie o arquivo Ruby, send_email.rb, que enviará seus e-mails para você:

Estamos usando essa abordagem aqui, pois usamos a Iron CLI. Você provavelmente desejaria enviar a carga útil de forma programática usando uma do Iron Ruby Gem.

require_relative 'bundle/bundler/setup'
require 'iron_worker'
require 'sendgrid-ruby'
include
SendGrid

from = Email.new(email: IronWorker.payload["from"])
to
= Email.new(email: IronWorker.payload["to"])
subject
= IronWorker.payload["subject"]
content
= Content.new(type: 'text/plain', value: IronWorker.payload["body"])

mail
= Mail.new(from, subject, to, content)
sg
= SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
response
= sg.client.mail._('send').post(request_body: mail.to_json)
puts response
.status_code
puts response
.body
puts response
.headers

Crie um arquivo payload.json que conterá os dados que você enviará ao seu programa Ruby.

{
"from": "test@example.com",
"to": "you@example.com",
"subject": "It works!",
"body": "Hello from IronWorker"
}

Agora você precisa instalar as dependências usando Docker, compactar seu código e fazer upload para o Iron.

Observe que, neste exemplo, você usará a imagem Docker baseada em Ruby do próprio Iron por conveniência. Você pode usar definitivamente usar suas próprias imagens se desejar.

> docker run --rm -v "$PWD":/worker -w /worker iron/ruby:dev bundle install --standalone --clean
> zip -r email_worker.zip .
> iron worker upload -e SENDGRID_API_KEY=YOUR_SENDGRID_API_KEY --name email_worker --zip email_worker.zip iron/ruby ruby send_email.rb

Depois que seu código for carregado para o Iron, você pode enviar e-mails sempre que desejar. Veja como enviar um e-mail via Iron CLI:

> iron worker queue --payload-file payload.json --wait email_worker

Você deve ver uma saída semelhante a esta:
email de ferro

Conclusão

Usar o produto Iron’s Worker é uma ótima maneira de executar tarefas em segundo plano. É independente de idioma, é executado em seu próprio contêiner e pode ser expandido sem que o usuário final precise se preocupar com a infraestrutura. Está disponível em todas as nuvens públicas e no local, para que você nunca precise se preocupar em ficar restrito a um único fornecedor de nuvem.