Domanda

Ho 2 bean basati sui messaggi. 2 Specifiche di attivazione per questi bean. Ho un bus dei messaggi ed entrambe le specifiche di attivazione sono configurate su questo bus. Ho 2 diverse code e una factory di connessione code configurata per quell'un bus dei messaggi.

Ora, scriverei il mio codice per inviare un messaggio a una delle code in fase di esecuzione dopo aver determinato la coda. Tuttavia, entrambi i miei MDB ricevono lo stesso messaggio. Come viene eseguita questa configurazione in generale? Configuro sempre 1 coda - > 1 Fabbrica connessioni in coda - > 1 bus messaggi - > 1 MDB? È tutto una relazione uno a uno?

Oh, ho dimenticato di menzionarlo: sto usando Websphere Application Server v6.1

È stato utile?

Soluzione

In generale il concetto è questo:

  1. un messaggio viene inviato (Coda) / pubblicato (Argomento) a una destinazione (Coda / Argomento)
  2. ActivationSpec ascolta i messaggi in una determinata destinazione (Coda / Argomento)
  3. ActivationSpec: la destinazione è una relazione 1: 1
  4. Un bean (MDB che è un consumatore) è configurato per ascoltare un ActivationSpec.

Ciò significa che in effetti il ??bean è collegato a una destinazione con uno strato di riferimento indiretto fornito da activSpec.

Da dove arriva il bus - SIBus è l'infrastruttura di messaggistica che rende tutto ciò possibile. Le destinazioni sono ospitate sul bus.

Venendo alla domanda: ActivationSpec sarebbe configurato per ascoltare una destinazione sul bus a cui sarebbero inviati i messaggi. La factory di connessione decide il bus a cui verrà inviato il messaggio. Fintanto che il nome della destinazione è univoco e indirizzato a una coda specifica (la coda JMS è collegata alla destinazione sul bus) un messaggio verrebbe ricevuto solo da un ActivationSpec.

quante destinazioni (sotto il collegamento SIBus nella console di amministrazione WAS) sono state create sul bus? Potresti verificare / convalidare se la configurazione è corretta?

per rispondere alle tue domande - " È un bus per specifica di attivazione e un factory di connessione code per coda. " - la risposta è NO.

  1. Il bus è l'infrastruttura sottostante che può ospitare " n " destinazioni. One ActivationSpec ascolta una destinazione.
  2. Con la connessione della coda factory è una factory (modello factory J2EE) per la creazione di code.

Altri suggerimenti

Penso che tu stia dicendo che vuoi che entrambi gli MDB ricevano lo stesso messaggio, giusto?

In tal caso, gli MDB dovrebbero ascoltare un argomento non una coda .

In alternativa, ci sono modi in cui è possibile configurare IBM MQ per inoltrare i messaggi, quindi ad esempio un messaggio inviato a una particolare coda può essere ripubblicato su n altro < em> code , ma l'ho visto solo quando si verifica una sorta di arricchimento dei messaggi prima del post-posting e quindi sospetto che sarebbe eccessivo per quello che stai cercando di ottenere.

Perché hai bisogno del bus dei messaggi?

Di solito associo un MDB a una coda - è una relazione 1: 1. Invia un messaggio a una coda, l'ascoltatore lo riceve. Cosa ti sta acquistando l'autobus?

Ho eseguito JMS con WebLogic e non è necessario un costrutto come un bus di messaggi. Penso che sia una cosa di IBM.

Ecco un esempio di come eseguire JMS con Spring. È così che consiglierei di procedere.

AGGIORNAMENTO: ho frainteso la tua domanda. Quando hai detto che entrambe le code stavano ricevendo lo stesso messaggio, non pensavo fosse il comportamento desiderato. In tal caso, gli argomenti sono la strada giusta da percorrere. Le code sono messaggi point-to-point; gli argomenti sono pubblicazione / iscrizione.

Sospetto che la configurazione che hai non sia impostata come pensi. Usiamo la stessa configurazione descritta da te, con molti MDB (con una coda e specifiche di attivazione), un singolo factory e bus dei messaggi e tutto funziona come previsto.

Non è possibile ottenere il comportamento che si sta verificando a meno che non si invii lo stesso messaggio a entrambe le code o non sia stato definito un argomento anziché una coda. Sono abbastanza sicuro che anche se entrambi gli MDB stanno leggendo dalla stessa coda, solo uno riceverà il messaggio, poiché una coda supporta solo la messaggistica punto a punto. Quello che hai descritto è un comportamento basato sull'argomento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top