2010-01-01 3 views
1

Dites que je charge des messages dans une file d'attente à partir de plusieurs nœuds.les files d'attente de messages fournissent-elles un support transactionnel?

Ensuite, un ou plusieurs nœuds tirent des messages de la file d'attente.

Est-il possible (ou est-ce un usage normal?) Que la file d'attente garantit de ne pas distribuer un message à plus d'un serveur/nœud?

Et ce serveur/noeud doit-il indiquer à la file d'attente qu'il a terminé l'opération et la file d'attente et supprimer le message?

+1

La réponse à tout ce qui précède est "oui". Si vous avez besoin d'une réponse plus spécifique, pouvez-vous poser une question plus spécifique? – skaffman

Répondre

2

Un système de mise en file d'attente de messages qui ne garantit pas de distribuer un message donné à un seul destinataire ne vaudrait pas la peine d'être utilisé. Certains systèmes de files d'attente de messages ont des contrôles transactionnels. Dans ce cas, si un destinataire reçoit un message dans le cadre d'une transaction, mais que le destinataire ne valide pas la transaction (et que la file d'attente des messages peut identifier le destinataire initial), il sera réémis. Cependant, le message ne serait pas mis à la disposition de deux processus simultanément.

2

Quelle technologie de messagerie/mise en file d'attente utilisez-vous? AMQP peut certainement garantir ce comportement (parmi beaucoup d'autres, y compris les modèles pub/sub)

0

Si vous voulez cela en Java - alors un système de messagerie compatible JMS fera ce que vous voulez - et la plupart des systèmes de messagerie ont un client JMS. Vous pouvez aussi utiliser le JmsTemplate de Spring pour une réelle facilité d'utilisation. Avec JMS - un message provenant d'une file d'attente ne sera consommé que par un et un seul client - et une fois qu'il est consommé (accusé de réception) - il sera supprimé du système de messagerie. Aussi, lorsque vous publiez un message en utilisant JMS - s'il est persistant - il sera envoyé de manière synchrone, et la méthode send() ne retournera pas jusqu'à ce que le message soit stocké sur le disque du courtier - ceci est important - si vous ne voulez pas courir le risque de perdre des messages en cas d'échec.

Questions connexes