Java Mail und idle() mit zig Emailadressen?

B

beta20

Top Contributor
Hallo zusammen,

hat vielleicht jemand Erfahrungswerte mit dem Überwachen von Emailadressen im Hintergrund?
Java Mail bietet hierfür ja die idle() - Methode an bzw. auch den IdleManager:
https://github.com/javaee/javamail/blob/master/mail/src/main/java/com/sun/mail/imap/IdleManager.java

Bei idle() läuft jeder Emailordner in einem Thread, bei IdleManager wohl nur ein Thread für alle.
Mein Vorhaben ist zig Emailadressen auf neue Email zu überwachen. Angenommen 1000 Emailadressen, später 10.000 Emailadressen....

Ist das völlig utopisch? Wird das mich so sehr an Performance / Ressourcen kosten? Oder mache ich mir hier im Vorhinein zu viel Gedanken, über die ich mir keine machen muss?

Kann hier jemand aus der Praxis berichten oder hat plausible Begründungen?

Vielen Dank für jede Hilfe.
 
L

LimDul

Top Contributor
Aus dem Bauch heraus wird das ein Problem. Soweit ich das sehe bedeutet das bei 10.000 Emailadressen 10.000 eigene TCP/IP Verbindungen (da die ja Logins benötigen) und damit im Programm auch 10.000 Threads per Default - was mit Sicherheit ein Problem gibt. Sprich, ich würde vermuten, dass man da (sofern es wirklich ein Programm sein soll) um Eigenbau-Lösungen nicht drumrumkommt.
 
B

beta20

Top Contributor
Aus dem Bauch heraus wird das ein Problem. Soweit ich das sehe bedeutet das bei 10.000 Emailadressen 10.000 eigene TCP/IP Verbindungen (da die ja Logins benötigen) und damit im Programm auch 10.000 Threads per Default - was mit Sicherheit ein Problem gibt. Sprich, ich würde vermuten, dass man da (sofern es wirklich ein Programm sein soll) um Eigenbau-Lösungen nicht drumrumkommt.

danke...

Die Logins lege ich bei mir in der Applikation ab. D.h. beim Hochfahren der Applikation wird einmal die Inbox dem IdleManager hinzugefügt (watch). Dann benötige ich doch keine 10.000 TCP / IP Verbindungen?

Ggf. müsste ich noch alle 10 Minuten einen check (zB. getNumberMessage) machen, dass ich nicht in einen Timeout laufe.

Was meinst du in dem Kontext genau dann mit "Eigenbau"?
 
L

LimDul

Top Contributor
danke...

Die Logins lege ich bei mir in der Applikation ab. D.h. beim Hochfahren der Applikation wird einmal die Inbox dem IdleManager hinzugefügt (watch). Dann benötige ich doch keine 10.000 TCP / IP Verbindungen?

Ggf. müsste ich noch alle 10 Minuten einen check (zB. getNumberMessage) machen, dass ich nicht in einen Timeout laufe.

Was meinst du in dem Kontext genau dann mit "Eigenbau"?
"Die Inbox" vs. "10.000 Email-Adressen" sind das nicht dann 10.000 Inboxen?
 
W

White_Fox

Top Contributor
Hier hat doch irgendjemand ein Javapaper verlinkt. Da stand etwas über virtuelle Threads drin...ich denke, das könnte etwas für dich sein.
 
temi

temi

Top Contributor
Müssen die denn permanent überwacht werden? Vielleicht könntest du sie ja pollen?

Aber ich frage mich grad - wer gibt dir denn die Anmeldedaten seines Mailaccounts? Oder hast du selbst 1000 Mailaccounts?
 
B

beta20

Top Contributor
Müssen die denn permanent überwacht werden? Vielleicht könntest du sie ja pollen?

Aber ich frage mich grad - wer gibt dir denn die Anmeldedaten seines Mailaccounts? Oder hast du selbst 1000 Mailaccounts?
Realtime wäre die beste Lösung. Zeitverzögerungen von 1-5 Minuten wäre auch noch OK.

Vllt. kurz zum Szenario etwas:
1) Kunde speichert seine Daten in der App, damit meine App den Emailordner überwachen kann.
2) Es kommt eine neue Email von XYZ herein für diese Emailadresse
3) Darauf hin sollen in meiner App sofort weitere Prozesse angestoßen werden (sende Email etc.)

Die Kunde gibt in der GUI seine Daten ein, diese werden verschlüsselt gespeichert. Ich kenne das von einer anderen Softwarelösung, die machen das auch so.

Pollen wäre auch eine Option, aber dann habe ich eben eine Zeitverzögerung.
Wenn ich bspw. nur alle 5 Minuten die Emails abrufe, würde ich dann nicht in solche Probleme laufen?
 
L

LimDul

Top Contributor
An der Stelle würde ich mir Gedanken um Load-Balancing & Co machen. Eine Anwendung die alles tut ist an der Stelle mit SIcherheit nicht mehr sinnvoll. Denn du brauchst dann ja pro E-Mail Account eine TCP-Verbindung, die auch möglichst dauerhaft gehalten werden soll.
 
W

White_Fox

Top Contributor
Nimm dir mal den Link vor, den ich gepostet habe. Da steht z.B. drin, daß ein extra Thread in Java erstaunlich viel Speicher benötgt - weitaus mehr, als für eine schnöde Verbindung eigentlich notwendig wäre. Wenn du für jede Verbindung einen neuen Thread aufmachst (was rein programmiertechnisch meiner Meinung nach ein naheliegender Ansatz wäre), bläst du den Hardwareaufwand sehr stark auf.
Und virtuelle Threads sollen das deutlich vereinfachen.
 
L

LimDul

Top Contributor
Es reicht wohl ein Thread, das stimmt. Aber 10.000 offene IMAP-Verbindungen gibt es auch nicht umsonst :) Und ein Thread heißt, das er auch nur eine Imap-Verbindung gleichzeitig prüfen und verarbeiten kann.

Nachtrag: Wenn das beispielsweise 10ms dauert heißt es, dass für 10.000 IMAP-Verbindungen das 100.000 ms dauert oder 100 Sekunden, sprich jeder Folder nur alle 100 Sekunden drankommt.
 
B

beta20

Top Contributor
Es reicht wohl ein Thread, das stimmt. Aber 10.000 offene IMAP-Verbindungen gibt es auch nicht umsonst :) Und ein Thread heißt, das er auch nur eine Imap-Verbindung gleichzeitig prüfen und verarbeiten kann.
Bist du dir dazu sicher? Das heißt der Executer geht dann nacheinander die Emailnboxed durch, die er überwacht?
Man könnte das doch auf mehrere Applicationserver verteilen?

Aber wenn ich den IdleManager verwende, würde das kein Sinn machen, da dann die Threads nicht auf den App- Server verteilt werden, oder?
Ich müsste das dann mit einzelnen Threads machen, damit das auf mehreren App - Server laufen kann?
 
L

LimDul

Top Contributor
Wie genau der IdleManager intern aufgebaut ist - keine Ahnung. Ob der pollt oder nicht. Aber ein Thread heißt nur eine Aktion zur gleichen Zeit. Sprich, wenn 100 E-Mail Folder gleichzeitig was melden das was da ist, kann das nur hintereinander verarbeitet werden.

Verschiedene Threads und App-Server haben erstmal nichts direkt miteinander zu tun. Verschiedene App-Server heißt auch verschiedene Anwendungen die laufen und sich entsprechend synchronisieren müssen. Und nicht eine Anwendung mit 2 Threads die auf verschiedenen Servern laufen. Das geht in der Form nicht.
 
L

LimDul

Top Contributor
Ein Load-Balancer ist nur ein System was einen Request an Server A oder Server B schickt. Das sind dann zwei Anwendungen.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Ok, danke. Aber brauche ich wirklich mehrere Threads? Siehe in der Doku:

https://access.redhat.com/webassets...0/javadocs/com/sun/mail/imap/IdleManager.html

To deliver all events in a single thread using the Executor, set the following properties for the Session (once), and then add listeners and watch the folder as above.

Nach meinem Verständnis ist das ein Thread?
Der Satz bezieht sich zwar auf das Ausliefern von Events, nicht auf das Abfragen, aber dafür wird immer ein Thread genutzt. Mit NIO dürfte das den Thread nicht sehr blockieren, allerdings bleibt die Menge an Verbindungen problematisch.

Man könnte das doch auf mehrere Applicationserver verteilen?
Aufteilen wäre sinnvoll, ein stumpfes parallelisieren des ganzen aber vermutlich weniger.

Potentiell könnte man die Applikation schneiden in reines Abfragen der Mails und alles andere, und nur ersteres lässt man auf mehreren Servern laufen. Kommunikation kann dann zB über eine Queue laufen, damit sind dann relativ einfach beliebige Mengen an abzufragenden Mailadressen möglich. Vielleicht bietet auch einer der großen Anbieter schon etwas passendes.

Ganz grundsätzlich könnte man aber auch drüber nachdenken, ob Mails das passende dafür sind – kommt natürlich drauf an, was das ganze System machen soll.


Ich wiederhole mich vermutlich zum 34768 Mal, aber: wenn man ein großes Softwaresystem mit uU zig tausend Kunden entwickelt, sollte man schon halbwegs entsprechendes Wissen haben...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Java mail API - möchte nur eine gewisse Anzahl von Emails in die Liste holen Allgemeines EE 3
E Java Mail problem Allgemeines EE 5
H JWebUnit Fehler: java.lang.NoClassDefFoundError: org/apache/regexp/RESyntaxException Allgemeines EE 24
M Rest mit Java 11 Allgemeines EE 6
M java.lang.SecurityException: class "javax.persistence.TupleElement"'s signer information does not match ... Allgemeines EE 1
F Java Programmierer Allgemeines EE 13
R Wie viel DevOps sollte ein Java-Entwickler kennen, der sich in Microservices spezialisiert? Allgemeines EE 5
Dimax JSP Probleme mit Java in JSP Allgemeines EE 21
Dimax JSP Auf button click java methode ausführen.Ist das möglich? Allgemeines EE 6
B Logging (log4j) in JAVA EE application - WildFly Allgemeines EE 15
A Java EE (am Cleint) und websocket Allgemeines EE 8
J Ich kann Java JDK nicht downloaden Allgemeines EE 6
R Aufbau zum Java EE Entwickler - Schulungen Allgemeines EE 0
G Java EE Hosting ? Allgemeines EE 6
P Java EE Videotutorials Allgemeines EE 1
R Java Enterpise entwickeln mit Virtualbox Allgemeines EE 6
A OutOfMemoryError: Java heap space Allgemeines EE 7
I Start Word from Java Allgemeines EE 1
T Java Jersey Interceptor Allgemeines EE 7
R Post Variable in Java Allgemeines EE 8
L JSP Fehlermeldung bei Verwendung von Java-Expression-Language Allgemeines EE 8
K Wie habt ihr Java EE gelernt? Allgemeines EE 11
H JSF Lösung einer Aufgabe im "Workshop Java EE7" Allgemeines EE 5
S Welcher Java EE Applikationserver für RESTful Webservice? Allgemeines EE 2
T Java Login Allgemeines EE 1
L Certified Master Java Enterprise Architect Java EE Allgemeines EE 3
R Java EE 6, eclipse, maven, jsf, hibernate, mysql Allgemeines EE 8
D Einfaches Java Projekt funktioniert nicht Allgemeines EE 3
W Authentifizierung und Sessions in Java EE7 Allgemeines EE 0
NicoDeluxe Task in Java ee Allgemeines EE 7
NicoDeluxe JSF - java File Verständnisfrage Allgemeines EE 5
NicoDeluxe Deployen ohne .java Files Allgemeines EE 0
E Wie kann ich über einen Suchfeld in Java Server Pages nach Datenbankinhalten suchen? Allgemeines EE 11
V Java EE 7 CDI, annotations und beans Allgemeines EE 1
G Bachelorthesis: Java oder PHP (CMS) Allgemeines EE 7
X Konsolenausgabe einer java klasse in eine jsp umleiten Allgemeines EE 7
S Aufruf eines EJBs aus einer nativen Java-Applikation Allgemeines EE 1
T Fertiges html javascrip css template in java EE application Allgemeines EE 0
F Eclipse/Java EE Debug-Problem Allgemeines EE 1
D Java Projekt goes Webservice Allgemeines EE 6
L Button Handling in JSP mit Java-Backend Allgemeines EE 2
Shams Frage zu Dowload von JAVA SDK Allgemeines EE 5
T Größeres Java EE Beispiel Projekt Allgemeines EE 4
N JavaScript schickt und Java empfängt? Allgemeines EE 4
O Java EE in Netbeans + allgemeine Fragen Allgemeines EE 5
H java selenium spezis? Allgemeines EE 4
H java selenium test connection refused Allgemeines EE 6
M Java EE-Technologie-Lern-Wahl Allgemeines EE 5
B [EJB] javax.inject.DefinitionException: bean not a Java type Allgemeines EE 5
J Java Dependencies auslesen Allgemeines EE 19
2 installation java EE Allgemeines EE 12
J PHP oder Java? Allgemeines EE 12
L Webseiten Formulare über Java Oberfläche ausfüllen? Allgemeines EE 2
T Java CMS Entwicklung : Welcher Weg ist besser? Allgemeines EE 9
F Gesucht: Gratis Server für Java Entwickler Allgemeines EE 4
J Einstieg in Java EE Allgemeines EE 5
aze Eclipse Java EE Web Project:Wo liegen die Servlets ? Allgemeines EE 4
S java Entities Problem Allgemeines EE 19
D Grundüberlegung Java Webprojekt Allgemeines EE 10
F Einstieg in Java EE - Beispielanwendungen Allgemeines EE 52
R JAVA EE - eigene Klassen aus EJB übernehmen Allgemeines EE 2
T "normales" Java Programm auf einen Server laufen lassen Allgemeines EE 3
M EE6+EJB+JavaLib: Error in annotation processing: java.lang.NoClassDefFoundError Allgemeines EE 4
G java ResourceLocator Allgemeines EE 12
M Was ist mit Java möglich? Allgemeines EE 13
T Komponenten zusammenhänge Java EE Allgemeines EE 7
A Java CMS Allgemeines EE 2
P Architektur Java EE <-> HTML5 Allgemeines EE 3
A Java Tomcat findet Website nicht Allgemeines EE 8
F Java EE Server nutzung kostenlos an Schule? (zB. mit Glassfish) Allgemeines EE 6
B Java EE, kickstart my heart Allgemeines EE 10
P Frage zu Java EE Design Patterns Allgemeines EE 3
G EJB und Java EE - No Persistence provider Allgemeines EE 5
zilti Java EE Hosting, worauf muss ich achten? Allgemeines EE 5
M Java EE6: Wie Login-Vorgang durchführen? Allgemeines EE 2
MQue Java Web- Application -> MVC Allgemeines EE 4
G Java <-> Flex Allgemeines EE 2
Spin Ant - Java Beans umsetzen Allgemeines EE 4
V "null" durch NICHTS ersetzen jsp und java beans Allgemeines EE 3
M Serialisierung und Klonen in Java Allgemeines EE 5
W JAVA Optionen auslesen Allgemeines EE 3
D Spring 3 vs. Java EE 6 Allgemeines EE 33
MQue CMS in Verbindung mit Java Allgemeines EE 16
X3TitanCore Java Servertechnologie Allgemeines EE 7
C WebStart Fehler nach update auf Java 1.6 Allgemeines EE 2
R Variablen statt Java-Methoden in EL's Allgemeines EE 4
T Suche Buch für: Large Scale Web-Apps | Clustering | Scaling in Java ? Allgemeines EE 4
G Vergleich zwischen Java Spirng und Ruby on Rails Allgemeines EE 9
K EJB Enterprise Java Beans Allgemeines EE 32
F Ich will mit Java Internetseiten bauen, aber wo hosten? Allgemeines EE 14
J OOP Java Array Problem Allgemeines EE 2
T Problem mit Java Transaction API Allgemeines EE 2
D Java EE vs. Spring/Hibernate Allgemeines EE 26
R Java EE Anfänger will mehr. Allgemeines EE 7
A Fragen zum Einstieg in Java EE Allgemeines EE 11
M Evolution der Web-Entwicklung im Java-Bereich Allgemeines EE 15
N erstes Java EE Projekt - Server/ EJB-Verbindung-Anfängerfage Allgemeines EE 17
G Von Java SE nach JavaEE umsteigen Allgemeines EE 31
K Java Application Server + ganttproject *.jar Anwendung Allgemeines EE 6
G Generelle Java EE Frage zum Einstieg Allgemeines EE 3

Ähnliche Java Themen

Anzeige

Neue Themen


Oben