Message Driven Beans e destinations associados

5 respostas
gcobr

Pessoal

Minha dúvida sobre MDBs:

Qual é a diferença entre associar MDBs a Queues ou a Topics?

Se for Queue as messagens vão ser despachadas em ordem de chegada para os MDBs?

5 Respostas

badjceo

Basicamente a diferença entre um topico e uma fila é a seguinte:

Enviando uma mensagem para um tópico vários consumidores podem receber essa mensagem
Enviando para uma fila , somente um consumidor vai recebe-la.

Ou seja: Tópico = um para muitos
Fila = um para um

Espero ter ajudado

Não tenho certeza, mas todas as mensagens tanto para tópicos quanto para filas irão ser enviadas em ordem.

gcobr

Você quer dizer que se um MDB estiver associado a uma fila, o container nunca vai criar mais do que uma instância deste MDB?

Pois aí, se ele criasse múltiplas instâncias do MDB, teríamos múltiplos consumidores recebendo, não é?

Além disso, com múltiplas instâncias, a próxima mensagem seria enviada para a próxima instância, antes que a primeira instância tivesse terminado de processar a mensagem anterior…

Esta parte para mim é a mais confusa, porque me parece que os app servers podem criar mais do que uma instância do MDB sim.

B

É importante estar ciente também do comportamento do JMS quando têm 2 ou mais servidores em cluster:

1) Since JMS topics use the publich/subscribe model, it's possible thata a message sent to a JMS [b]topic [/b]will be delivered to more than one consumer.													
    2) Many containers will create a pool of many message-driven bean instances to process multiple messages concurrently.													
    3) A container that subscribes to a [b]topic[/b] consumer any given message only once, in other words, just to one bean instance of that MDB.													
    4) The JMS subsystem will treat each JMS message-driven bean container as a separate subscriber to the message.													
    5) This means that if the same JMS message-driven bean is deployed to many containers in a cluster, then each deployment of the LMS message-driven bean will consume a message from the [b]topic[/b] it subscribes to.													
    6) If this is not the behavior that you want, you need to consume messages of a [b]queue[/b] instead of a [b]topic[/b].

Desculpe por não ter traduzido para português…

Abraço.

gcobr

Certo Berkamps

Mas imaginando um cenário sem cluster:

  1. Se o container criar mais do que uma instância do MDB e este MDB estiver associado a uma fila, o container garante que não vai entregar a mesma mensagem para mais do que uma instância?
  2. Ainda no caso de uma fila, caso o container crie mais do que uma instância do MDB, ele vai entregar a próxima mensagem da fila para outra instância antes que a primeira tenha sido completamente processada? Se isso for assim, a segunda mensagem não pode depender de algum estado que a primeira tenha mudado no sistema (no banco de dados, por exemplo), certo?

Você poderia informar de onde copiou o texto que você colou no post anterior?

Obrigado.

B
  1. A resposta é sim
  2. Não, isso a especificação não garante. O recebimento de mensagens pode acontecer concorrentemente.
    A especificação EJB 3.0 diz: “Message-driven beans should therefore be prepared to handle messages that are out of sequence: for example, the message to cancel a reservation may be delivered before the message to make the reservation.”

Não tenho a referência web das anotações anteriores, mas se encontrar do um post aki.

Abraço

Criado 15 de maio de 2008
Ultima resposta 30 de mai. de 2008
Respostas 5
Participantes 3