Javamail - Otimização  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
rodpuc
Java Ninja
[Avatar]

Membro desde: 17/08/2006 14:55:20
Mensagens: 299
Offline

Tenho o seguinte método que uso para enviar e-mails em meu sistema.
Um dos tipos de e-mail é uma newsletter... bom, o meu sistema ainda não está em produção e resolvi fazer um teste cadastrando míseros 500 usuários e, quando tentei mandar a newsletter levou uma eternidade... Isso me preocupa muito pois o sistema espera ter cerca de 1 milhão de usuários (ou mais) =x

Alguém poderia me dar uma mão em como otimizar isso, ou fornecer alguma altrenativa a essa maneira de enviar a newsletter?

Astork
JavaGuru

Membro desde: 13/11/2008 17:14:18
Mensagens: 214
Localização: Curitiba
Offline

A principio a melhor forma de se fazer isto é criando threads !!!
Assim vc consegue enviar varios emails ao mesmo tempo.. !!! neste seu caso Threads e ThreadPoolExecutor

Não sei se vc sabe mexer com thread, mas de uma pesquisada e surgindo duvidas poste que a galera vai te ajudando...

Att
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1694
Offline

Primeiro, seu sistema roda em que tipo de ambiente?
Quais são as tecnologias utilizadas?
rodpuc
Java Ninja
[Avatar]

Membro desde: 17/08/2006 14:55:20
Mensagens: 299
Offline

roda no tomcat
usa spring, hibernate e struts 2
kzar.razk
Entusiasta Java
[Avatar]

Membro desde: 23/06/2010 20:00:25
Mensagens: 23
Localização: Brasília
Offline

Talvez o serviço de SMTP tenha uma solução melhor no caso da mensagem for igual para todos os usuários, um grupo de usuários que receba a mensagem e a encaminhe para todos os usuários do grupo. Seu método não tem tratamento de exceção e existe um risco bem grande de estas ocorrerem. Conheço sistemas de newsletter que tem 300000 usuário e funciona perfeitamente.
rodpuc
Java Ninja
[Avatar]

Membro desde: 17/08/2006 14:55:20
Mensagens: 299
Offline

Legal! Fiz com threads e parece ter melhorado bastante, porém surgiram agora 2 problemas.
Primeiro deixa eu mostrar como eu fiz, aí vou falar oq acontece de errado.



E no meu bean do spring


Aí surgem 2 problemas:
1 - Estou criando threads indiscriminadamente, isso não pode causar um problema de falta de memória em algum momento?

2 - Muitos dos e-mails são enviados com sucesso, mas para muitos outros eu tomo esse erro: Could not connect to SMTP host: mail.[omitido].com.br, port: 25
Acredito que isso se deva a uma limitação no número de conexões simultâneas que o servidor de e-mail aceita.

Para ambos os problemas, a solução seria limitar o número de threads que rodam em paralelo. Gostaria de saber se vcs concordam com o meu "diagnóstico" do problema e como fazer essa limitação de threads.

Valeu!
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1694
Offline

Se for usar essa solução de Threads mesmo use um ThreadPool, um ScheduledThreadPool por exemplo lhe serviria.
Nele você pode limitar o número de threads simultâneas, dai conforme elas foram acabando outras que estão na fila serão executadas.

Abraços.

edit: correção.

This message was edited 1 time. Last update was at 19/02/2011 15:40:40

marcobiscaro2112
JWizard

Membro desde: 01/12/2008 11:56:04
Mensagens: 2408
Localização: São Paulo - SP
Offline

Muitos (senão todos os) serviços de e-mail limitam a quantidade de e-mails enviados por hora/dia e/ou o número de conexões simultâneas.

Uma solução que alguns provedores oferem é o uso de grupos de e-mail no servidor.

Um exemplo prático: usando Google Apps, pode-se criar um grupo com 10 mil pessoas e enviar apenas 1 e-mail que chegará para todas elas.

Isso reduz em milhares de vezes o tempo gasto no envio de e-mails. Isso pode ser crucial, principalmente em casos como o seu, em que o número de e-mails é absurdamente grande.

Entretanto, nem todos os provedores de e-mail têm uma funcionalidade semelhante. De qualquer forma, fica a dica.

Marco Biscaro.

Seja livre!

Você sabia que provavelmente há milhares de arquivos duplicados no seu computador?

Ei... você está usando DefaultTableModel no seu projeto?? Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team