| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/05/2008 14:10:37
|
gcobr
JavaEvangelist
![[Avatar]](/images/avatar/c8cb367040e335d5265c1.jpg)
Membro desde: 21/01/2004 16:55:29
Mensagens: 305
Localização: São Paulo/SP
Offline
|
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?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/05/2008 22:38:22
|
badjceo
Thread.start()
Membro desde: 20/08/2007 21:27:48
Mensagens: 40
Offline
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2008 08:22:12
|
gcobr
JavaEvangelist
![[Avatar]](/images/avatar/c8cb367040e335d5265c1.jpg)
Membro desde: 21/01/2004 16:55:29
Mensagens: 305
Localização: São Paulo/SP
Offline
|
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.
This message was edited 2 times. Last update was at 17/05/2008 08:25:15
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2008 14:35:59
|
Berkamps
Thread.start()
Membro desde: 01/09/2007 17:52:21
Mensagens: 46
Offline
|
É 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 topic 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 topic 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 topic it subscribes to.
6) If this is not the behavior that you want, you need to consume messages of a queue instead of a topic.
Desculpe por não ter traduzido para português...
Abraço.
|
SCJP 1.4
SCWCD 1.4
SCBCD 5.0
SCEA 5.0
OMG OCUP Fundamental
CFPS |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/05/2008 07:54:35
|
gcobr
JavaEvangelist
![[Avatar]](/images/avatar/c8cb367040e335d5265c1.jpg)
Membro desde: 21/01/2004 16:55:29
Mensagens: 305
Localização: São Paulo/SP
Offline
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/05/2008 09:43:29
|
Berkamps
Thread.start()
Membro desde: 01/09/2007 17:52:21
Mensagens: 46
Offline
|
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
|
SCJP 1.4
SCWCD 1.4
SCBCD 5.0
SCEA 5.0
OMG OCUP Fundamental
CFPS |
|
|
 |
|
|