Abbiamo un lavoro in background (java batch) che ascolta / legge da un MQ e persiste un messaggio nel database (tabella locale). Quindi un trigger invia questo messaggio in una tabella di accodamento in stato di ATTESA. Il mio programma di polling (multithreaded in java) esegue sondaggi continui per i record WAITING, li preleva e li invia al consumatore appropriato (programma java). Anche i messaggi dello stesso tipo devono essere elaborati in modo sincrono. (stesso numero d'ordine, ma entrambi arrivano all'N ° minuto. È necessario completarlo prima che inizi un altro) Tuttavia in questo caso a causa del polling del database c'era la possibilità che lo stesso record potesse essere prelevato da due thread che ha causato un problema, quindi abbiamo messo il polling come sincronizzato che ora si traduce in deadlock.
Come posso rimuovere questo polling del database e utilizzare un meccanismo o code basato su eventi che sarebbe possibile anziché il polling del database e preservare anche la sincronizzazione.
Edit-- L'ulteriore elaborazione dei messaggi comprende 4 attività di natura asincrona, ma tutte le attività devono essere completate prima di elaborare il secondo messaggio dello stesso tipo (orderid). Il processo padre deve essere sincrono e il figlio asincrono. Saranno necessarie 2 code per lo stesso?