Pergunta

Eu gostaria de saber:

Eu tenho um cenário. Se um usuário adicionar um produto ao sistema (estou desenvolvendo), há um ouvinte que envia uma notificação à base de clientes do usuário notificando um novo produto adicionado pelo usuário.

Eu li isso fio e (vendo que nunca usei JMS nem ThreadPool antes) eu queria saber se deveria usar JMS ou Threadpooling.

Estou usando o TomCat 5.5 e o JBoss 5 e superior (dependendo do último recurso da empresa) para implantar meu aplicativo da Web.

Se eu uso JMS, eu uso Apache ActiveMq ou Mensagens de Jboss? Ambos são compatíveis para executar nas duas plataformas (Tomcat e Jboss)?

Desde já, obrigado.

Foi útil?

Solução

Para se comunicar entre aplicativos, o JMS é uma solução muito boa, especialmente para eventos e notificações. O JMS permite que essas notificações sejam enviadas e recebidas usando o que é conhecido como mensagens assíncronas pelas quais o remetente e o receptor não têm conhecimento um do outro e nenhum requisito para estar disponível ao mesmo tempo.

O ActiveMQ é um corretor de mensagens muito usado que fornece APIs do cliente para Java, C/C ++, C#, Perl, Php, Python, Ruby e muito mais. Isso permite o uso de JMS com aplicativos escritos em Java e outros idiomas.

Eu implementei o JMS Mensagem muitas, muitas vezes para uma grande variedade de situações de negócios para lidar com eventos e notificações. A grande maioria desses tempos, eu recomendei e/ou usei Spring JMS Não importa qual corretor de mensagens esteja sendo usado. O Spring JMS é incrivelmente fácil de usar, extremamente robusto e altamente escalável. O Spring JMS remove a complexidade de criar seus próprios produtores de mensagens e consumidores de mensagens, o que pode economizar uma quantidade enorme de tempo.

Para ver como é fácil enviar mensagens usando o Spring JMS, confira uma postagem no blog que escrevi recentemente intitulada Usando o Spring Jmstemplate para enviar mensagens JMS. Também estou trabalhando em um post sobre receber mensagens usando o Spring JMS.

Se você tiver mais alguma dúvida, me avise.

Bruce

Outras dicas

Eu tinha um requisito semelhante uma vez e usamos o JMS. Então o principal problema foi como lidar com erros porque o SMTP realmente não é transacional:

  1. Tudo bem se algum email estiver perdido?
  2. Tudo bem se algum email for enviado duas vezes?

Decidimos que era melhor enviar a mensagem duas vezes, e aqui está mais ou menos o design que tínhamos:

  1. Contamos com a transação gerenciada por contêineres e, se, por algum motivo, o email não puder ser enviado, decidimos reverter a transação JMS; A mensagem seria desgastada posteriormente pelo JMS e uma nova tentativa de enviar a mensagem foi realizada.

  2. Se a transação de entrega de mensagens JMS falhou após o envio do email (por exemplo, por causa de um problema com o JMS), a transação seria revertida automaticamente e a mensagem foi redelligida posteriormente. Nesse caso, o email foi enviado duas vezes porque o STMP não é transacional.

  3. Mesmo que o email possa ser enviado (do ponto de vista do código), o servidor SMTP ainda poderá ter problemas posteriormente. Nesse caso, os JMs foram entregues e consumidos, por isso não tínhamos como saber qual e-mail havia sido processado e como recostá-los manualmente.

Mas já estávamos usando o JMS. Eu não apresentaria o JMS apenas para o que o principal argumento é que o JMS é transacional, mas o SMTP não é de qualquer maneira.

Eu iria para algo mais leve - possivelmente com um Threadpool - e armazenaria o estado em um banco de dados para saber qual email precisa ser enviado ou foi enviado. Se houver algum problema, você pode olhar para o banco de dados e tomar as decisões ad-hoc.

Sei que essa resposta é muito tarde para essa dicsussion, mas espero que ainda seja valiosa para as pessoas que buscam informações sobre a integração do ActiveMQ e do Tomcat.

Muitas pessoas me pediram ajuda com problemas que eles tiveram integração do ActiveMQ e TOMCAT, então decidi escrever alguns artigos sobre isso. Este tópico não é apenas abordado em ActiveMQ em ação (Veja o capítulo 8), mas também publiquei uma série de artigos sobre ele intitulados ActiveMQ e Tomcat: parceiros perfeitos. Espero que as pessoas achem isso útil.

Eu optaria por um JMS persistente (usei apenas o WLS JMS e o WebSphere MQ, para que não possa comparar o AQ vs JBoss, o que oferecer uma garantia melhor para a entrega). Além disso, eu consideraria seriamente tornar o mecanismo de e -mail um aplicativo completamente separado, dependendo de quanto você espera que o tráfego cresça.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top