Re:JMS, paralelismo e ConnectionConsumer - conceitos

Olá!

Achei interessante a dúvida levantada por você.
Não sou especialista em MDBs, mas até onde sei (e aí, se alguém mais experiente puder ajudar) os MDBs se comportam como os EJBs stateless, ou seja, você terá uma instância do seu MDB tratando toda a messageria. Como só o conteiner poderá decidir se mais de uma instância será necessária (e de acordo com suas anotações), acredito que o paralelismo somente ocorrerá se você configurar o pool para fornecer mais de uma instância do seu MDB.
Neste caso, se você configurar o container para apenas uma instância do MDB, não haverá paralelismo na messageria.
Só não sei se o container faz algum controle de qual mensagem será tratada primeiro, no caso de mais de uma instância do MDB…

Alguém mais se habilita?

Abraços!!!

Pense no MDB como um simples consumer da sua fila JMS. Você pode configurar o seu consumer para processar uma mensagem por vez ou para processar no máximo N mensagens por vez.

Bom dia,

estou com duvidas em relação a alguns conceitos envolvendo itens acima.

Se eu tenho uma fila configurada e um MDB escutando essa fila, então para cada mensagem que chegar a esta fila, uma instancia deste MDB será carregada da pool para executar esta mensagem, isto configura um cenário de paralelismo, certo? Ao menos eu penso que sim, porque ainda que uma mensagem esteja sendo processado por um MDB, se chegar outra na fila um outro MDB processará essa mensagem.

Só que pesquisando em outros sites eu vejo isto:

“JMS supports parallel-message processing with ConnectionConsumers that manage ServerSessionPools”.

Ainda na API:

“A ConnectionConsumer implemented by a JMS provider uses a ServerSession to process one or more messages that have arrived. It does this by getting a ServerSession from the ConnectionConsumer’s ServerSessionPool; getting the ServerSession’s JMS session; loading it with the messages; and then starting the ServerSession.”

Não entendi bem o próposito disso. No cenário onde não há ConnectionConsumer, as mensagens não são executadas em paralelo? Pra que servem estes ServerSession?

“For application servers, Connection objects provide a special facility for creating a ConnectionConsumer (optional). The messages it is to consume are specified by a Destination and a message selector. In addition, a ConnectionConsumer must be given a ServerSessionPool to use for processing its messages”

Uma pool de ServerSession para processar as mensagens. Mas quem processas essas mensagens não são instancias do meu MDB?

Grato por qualquer esclarecimento destes conceitos.

desculpe,

mas ainda não está muito claro pra mim.

Uma instancia do MDB processará apenas uma mensagem. Correto né?

Varias instancias do MDB poderão estar executando varias mensagens. Certo?

Se as duas afirmações estão corretas, este cenário caracteriza paralelismo no processamento.

E o que dizer sobre ConnectionConsumers e a afirmação abaixo:

“JMS supports parallel-message processing with ConnectionConsumers that manage ServerSessionPools”. ???