Nous avons une file d'attente JMS de statuts de travail, et deux processus identiques tirant de la file d'attente pour conserver les statuts via JDBC. Lorsqu'un statut de travail est extrait de la file d'attente, la base de données est vérifiée pour voir s'il existe déjà une ligne pour le travail. Si c'est le cas, la ligne existante est mise à jour avec un nouveau statut. Sinon, une ligne est créée pour ce statut initial.Enregistrement JDBC multithread-safe ou mise à jour
Ce que nous voyons est qu'un petit pourcentage de nouveaux travaux sont ajoutés deux fois à la base de données. Nous sommes sûrs que c'est parce que le statut initial du travail est rapidement suivi d'une mise à jour du statut - un processus en obtient un, un autre traite l'autre. Les deux processus vérifient si le travail est nouveau et, comme il n'a pas encore été enregistré, tous deux créent un enregistrement pour ce travail. Donc, ma question est: comment allez-vous prévenir cela de manière neutre vis-à-vis des fournisseurs? Peut-il être fait sans verrouiller toute la table?
EDIT: Pour ceux qui disent que "l'architecture" est malsaine - je suis d'accord, mais je ne suis pas libre de le changer.
Oui, nous avons des exemples où le deuxième message est conservé après le premier que vous décrivez. – SingleShot