| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2011 14:09:29
|
rodpuc
Java Ninja
![[Avatar]](/images/avatar/631ceaa1abe4dcc8659f7477bbe1f4bf.png)
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?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2011 14:38:00
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2011 15:12:05
|
Tchello
GUJ Master
![[Avatar]](/images/avatar/901db33c84e81b1a30e59949bbcb112b.png)
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?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2011 17:26:25
|
rodpuc
Java Ninja
![[Avatar]](/images/avatar/631ceaa1abe4dcc8659f7477bbe1f4bf.png)
Membro desde: 17/08/2006 14:55:20
Mensagens: 299
Offline
|
roda no tomcat
usa spring, hibernate e struts 2
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/02/2011 07:48:04
|
kzar.razk
Entusiasta Java
![[Avatar]](/images/avatar/976b2b694611b61abecd83f79392ced1.jpg)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/02/2011 13:56:23
|
rodpuc
Java Ninja
![[Avatar]](/images/avatar/631ceaa1abe4dcc8659f7477bbe1f4bf.png)
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!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/02/2011 15:39:13
|
Tchello
GUJ Master
![[Avatar]](/images/avatar/901db33c84e81b1a30e59949bbcb112b.png)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/02/2011 18:08:10
|
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 |
|
|
 |
|
|