Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Multithread e garanzia di giusta sequenza

    Ciao a tutti

    Avrei da sottoporvi un problema un po' ostico per me

    lo scenario è questo:
    ho un servizio che è continuamente in ascolto su una socket su cui vengono spediti messaggi xml.
    Il mio problema è il seguente: ogni xml che ricevo dovrei poi persisterlo sul db e mandarlo anche su una coda jms scodata da un mdb che poi esegue della logica di controllo. Siccome il mio servizio è sempre in ascolto sono costretto ad usare i thread per effettuare tutte le operazioni richieste onde evitare di effettuare le operazioni in un unico thread e rallentare il servizio, rischiando di perdermi qualche xml.
    Il problema che a me serve che i messaggi in coda e sul db vengano mandati secondo una precisa sequenza dettata dal timestamp, cosa non garantita se utilizzo più thread. Come posso fare per garantirmi la perfetta sequenzialita' dei messaggi senza però rallentare il mio ascoltatore e quindi rischiare di perdermi i messaggi?

    Spero di essere stato chiaro grazie a tutti

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Se ho capito bene vengono inviati questi dati e tutti devono arrivare nello stesso ordine, con la stessa sequenza insomma.

    In questo caso una soluzione che mi viene in mente è gestire l'invio dei dati (visto che chiamerai un metodo che invia i dati) usando un metodo dichiarato come synchronized.
    Un altra assegnare ad ogni parte un ID univoco e ordinarli dal lato del ricevente, ma dipende poi da come e soprattutto quando devi elaborarli.

    Usando synchronized in pratica un thread non entra in un metodo se questo è già "occupato".

    Alcune risorse (ti farei un esempio con spiegazione ma è notte ormai inoltrata):

    http://docs.oracle.com/javase/tutori.../syncmeth.html
    http://docs.oracle.com/javase/tutori.../locksync.html

    Ed un esempio:

    http://docs.oracle.com/javase/tutori...y/syncrgb.html

    In quella sezione trovi tutta la parte dedicata alla Concurrency comunque.

  3. #3
    Urca....non avevi sonno stanotte?!?
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.