Question

J'ai 2 beans Message driven. 2 Spécifications d'activation pour ces haricots. J'ai un bus de messages et les deux spécifications d'activation sont configurées pour ce bus. J'ai 2 files d'attente différentes et une fabrique de connexions de file d'attente configurée pour ce bus de messages.

Maintenant, j'écrirais mon code pour envoyer un message à l'une des files d'attente au moment de l'exécution après avoir déterminé la file d'attente. Cependant, mes deux bases MDB reçoivent le même message. Comment se fait cette configuration en général? Est-ce que je configure toujours 1 file d'attente - > 1 fabrique de connexions de file d’attente - > 1 bus de messages - > 1 MDB? Est-ce que tout est une relation un à un?

Oh, j'ai oublié de mentionner ceci: j'utilise Websphere Application Server v6.1

Était-ce utile?

La solution

En général, le concept est le suivant:

  1. un message est envoyé (file d'attente) / publié (sujet) à une destination (file d'attente / sujet)
  2. la spécification d'activation écoute les messages ayant une destination particulière (file d'attente / sujet)
  3. ActivationSpec: la destination est une relation 1: 1
  4. Un bean (MDB qui est un consommateur) est configuré pour écouter une ActivationSpec.

Cela signifie que le bean est en fait lié à une destination avec une couche d'indirection fournie par activationSpec.

Où le bus entre-t-il? SIBus est l’infrastructure de messagerie qui rend tout cela possible. Les destinations sont hébergées sur le bus.

En venant à la question - la ActivationSpec serait configurée pour écouter une destination sur le bus à laquelle des messages seraient envoyés. La fabrique de connexions décide du bus auquel le message sera envoyé. Tant que le nom de destination est unique et ciblé sur une file d'attente spécifique (la file d'attente JMS est liée à la destination sur le bus), un seul message sera reçu par une seule ActivationSpec.

combien de destinations (sous liaison SIBus dans la console d’administration WAS) ont été créées sur le bus? Pourriez-vous vérifier / valider si la configuration est correcte?

pour répondre à vos questions - "S'agit-il d'un bus par spécification d'activation et d'une fabrique de connexions de file d'attente par file d'attente" - la réponse est NON.

  1. Le bus est l'infrastructure sous-jacente pouvant héberger " n " destinations. Une ActivationSpec écoute une destination.
  2. Avec la connexion de file d'attente, la fabrique est une fabrique (modèle d'usine J2EE) permettant de créer des files d'attente.

Autres conseils

Je pense que vous dites que vous voulez que les deux BMD reçoivent le même message, n'est-ce pas?

Si tel est le cas, les MDB doivent écouter une rubrique et non une file d'attente .

Vous pouvez également configurer IBM MQ pour transférer les messages. Ainsi, par exemple, un message posté sur une file d'attente particulière peut être réaffiché sur n autre < em> queues , mais je ne l’ai vu que lorsqu’un enrichissement du message a lieu avant la nouvelle publication. Je suppose donc que ce serait exagéré pour ce que vous essayez d’atteindre.

Pourquoi avez-vous besoin du bus de messages?

Généralement, j'associe une base de données à une file d'attente - c'est une relation 1: 1. Envoyez un message à une file d'attente, l'auditeur l'obtient. Qu'est-ce que le bus t'achète?

J'ai utilisé JMS avec WebLogic et aucune structure de ce type n’est requise, comme un bus de messages. Je pense que c'est une chose d'IBM.

Un exemple de la façon de faire JMS avec Spring. Voilà comment je recommanderais de procéder.

UPDATE: J'ai mal interprété votre question. Quand vous avez dit que vos deux files d'attente recevaient le même message, je ne pensais pas que c'était le comportement souhaité. Si tel est le cas, les sujets sont la bonne voie à suivre. Les files d'attente sont des messages point à point; les sujets sont publiés / abonnés.

Je soupçonne que la configuration que vous avez n’est pas configurée comme vous le pensez. Nous utilisons la même configuration que celle que vous avez décrite, avec de nombreuses MDB (avec une file d'attente et des spécifications d'activation), une usine et un bus de messages uniques, et tout fonctionne comme prévu.

Il est impossible d'obtenir le comportement que vous observez si vous n'envoyez pas le même message aux deux files d'attente ou si vous avez défini un sujet au lieu d'une file d'attente. Je suis à peu près sûr que même si les deux bases de données multimédias lisent dans la même file d'attente, un seul recevra le message, car une file d'attente ne prend en charge que la messagerie point à point. Ce que vous avez décrit est un comportement basé sur un sujet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top