Pregunta

Estoy usando una azure cola de almacenamiento para enviar correos electrónicos.Los correos electrónicos se almacenan en la cola de almacenamiento y la cola envía 20 correos electrónicos a la vez.

//Checks for messages inn the queue
foreach (CloudQueueMessage msgin sendEmailQueue.GetMessages(20, TimeSpan.FromSeconds(50)))
   {
        ProcessQueueMessage(msg);

   }

El problema que estoy teniendo es que cuando un correo electrónico se agrega a la cola de una incorrecta detalles SMTP(he.correo contraseña incorrecta), el mensaje permanece en la cola de la falla para enviar y evita que otros mensajes en la cola de envío.

private void ProcessQueueMessage(CloudQueueMessage msg)
{
  try
  {
    //We try to send an email
    SendEmail(emailRowInMessageTable, htmlMessageBodyRef, textMessageBodyRef);

  } catch (SmtpException e)
  {
    string err = e.Message;

    //When an error occurs we check to see if the message failed to send certain no. of      
      times
    if (msg.DequeueCount > 10)
    {
      //We delete the message from queue
      sendEmailQueue.DeleteMessage(msg);

      return;
    } else
    {
      //delete from top of queue
      sendEmailQueue.DeleteMessage(msg);

      //insert into end of queue
      sendEmailQueue.AddMessage(msg);

      return;
    }
  }
 }

La solución que probé fue para borrar el mensaje de la cola si hubo un error y añadir de vuelta al final de la cola resultante de la correcta correos electrónicos que se envían.Pero la eliminación o adición de el mensaje en la cola restablece su cola, propiedad que no es lo ideal desde que estoy usando el de la cola de la propiedad para asegurarse de que un mensaje que no está en la cola para siempre.

Cuál sería la mejor solución en esta situación?

¿Fue útil?

Solución 2

La solución fue usar diferentes colas para diferentes servidores SMTP y ejecutarlo todo de un rol de trabajadores usando múltiples hilos.

Usé el marco aquí: http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.com/2010/12/running-multiple-tmlishs-on-windows.html para ejecutar múltiples hilos dentro de un solo papel de trabajador.

Otros consejos

Usted realmente no tiene que eliminar el mensaje y añadir.Una vez que el mensaje del visibility timeout período (50 segundos en su caso) que ha expirado aparecerá automáticamente en la cola.De esta manera, su DequeueCount la lógica también funcionaría como el mismo mensaje está eliminando y en la cola de espera de nuevo.

Por favor, tenga en cuenta que Windows Azure las Colas son de mejor esfuerzo FIFO ...por lo que no es siempre necesario, y que los mensajes serán seleccionados sobre la base de que el tiempo se han agregado.Usted podría hacer un par de cosas:

  • Reducir el número de reintentos (en la actualidad tiene 10, se puede reducir a 5) o
  • Compruebe la excepción real.Si el proceso no pudo porque de credenciales incorrectas, se producirá la próxima vez, y la próxima vez después de eso.No hay ningún punto de reintentar el mensaje.Sólo podía mover ese mensaje en una cola de daños, de modo que usted puede inspeccionar el mensaje más tarde.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top