JMS – Definição e Configuração(JBoss AS 7)

  • O que é?

JMS é um Middleware Orientado a Mensagens (MOM) que permite que um sistema receba ou envie mensagens para outros sistemas de forma assíncrona. Além disso, o sistema que envia uma mensagem não precisa conhecer os sistemas que a receberá, da mesma forma, os sistemas que recebem uma mensagem não precisam conhecer o sistema que a enviou.

  • Destinos: Filas e Tópicos

Os sistemas que devem ser integrados devem enviar mensagem para filas(queues) ou tópicos(topics) cadastrados anteriormente no MOM.

Uma mensagem enviada para uma fila pode ser recebida por apenas um sistema(point-to-point). Uma mensagem enviada para um tópico pode ser recebida por diversos sistemas(publish-and-subscribe).

A fila têm mensagens persistentes, o tópico não, ou seja, todos que assinarem o tópico receberão a mensagem somente na hora que a mesma foi postada.

  • Fábrica de Conexões – Configurações no JBoss AS 7

Os sistemas que desejam trocar mensagens através de filas ou tópicos devem obter conexões JMS através das fábricas cadastradas no MOM.

Configurações: Editar o arquivo Standalone.xml do jboss ( jboss-as-7.1.1.Final/standalone/configuration/standalone.xml)

  1. Adicionar tag de extensão do inicio do arquivo ( <extension module=”org.jboss.as.messaging”/> )
  2. Na seção de subsistemas adicionar as seguintes configurações:<subsystem xmlns=”urn:jboss:domain:messaging:1.0″>
    <journal-file-size>102400</journal-file-size>
    <journal-min-files>2</journal-min-files>
    <journal-type>NIO</journal-type>
    <persistence-enabled>false</persistence-enabled><connectors>
    <netty-connector name=”netty” socket-binding=”messaging” />
    <netty-connector name=”netty-throughput” socket-binding=”messaging-throughput”>
    <param key=”batch-delay” value=”50″/>
    </netty-connector>
    <in-vm-connector name=”in-vm” server-id=”0″ />
    </connectors><acceptors>
    <netty-acceptor name=”netty” socket-binding=”messaging” />
    <netty-acceptor name=”netty-throughput” socket-binding=”messaging-throughput”>
    <param key=”batch-delay” value=”50″/>
    <param key=”direct-deliver” value=”false”/>
    </netty-acceptor>
    <acceptor name=”stomp-acceptor”>
    <factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
    <param key=”protocol” value=”stomp” />
    <param key=”port” value=”61613″ />
    </acceptor>
    <in-vm-acceptor name=”in-vm” server-id=”0″ />
    </acceptors><security-settings>
    <security-setting match=”#”>
    <permission type=”createNonDurableQueue” roles=”guest”/>
    <permission type=”deleteNonDurableQueue” roles=”guest”/>
    <permission type=”consume” roles=”guest”/>
    <permission type=”send” roles=”guest”/>
    </security-setting>
    </security-settings><address-settings>
    <address-setting match=”#”>
    <dead-letter-address>jms.queue.DLQ</dead-letter-address>
    <expiry-address>jms.queue.ExpiryQueue</expiry-address>
    <redelivery-delay>0</redelivery-delay>
    <max-size-bytes>10485760</max-size-bytes>
    <message-counter-history-day-limit>10</message-counter-history-day-limit>
    <address-full-policy>BLOCK</address-full-policy>
    </address-setting>
    </address-settings>
    <jms-connection-factories>
    <connection-factory name=”InVmConnectionFactory”>
    <connectors>
    <connector-ref connector-name=”in-vm”/>
    </connectors>
    <entries>
    <entry name=”java:/ConnectionFactory”/>
    </entries>
    </connection-factory>
    <connection-factory name=”RemoteConnectionFactory”>
    <connectors>
    <connector-ref connector-name=”netty”/>
    </connectors>
    <entries>
    <entry name=”RemoteConnectionFactory”/>
    </entries>
    </connection-factory>
    <pooled-connection-factory name=”hornetq-ra”>
    <transaction mode=”xa”/>
    <connectors>
    <connector-ref connector-name=”in-vm”/>
    </connectors>
    <entries>
    <entry name=”java:/JmsXA”/>
    </entries>
    </pooled-connection-factory>
    </jms-connection-factories>
    </subsystem>
  3. Dentro da tag <socket-binding-group>, adicionar as seguintes configurações:                                                                                                                                                                          <socket-binding name=”messaging” port=”5445″ />
    <socket-binding name=”messaging-throughput” port=”5455″/>
  • Definição de Filas e Tópicos no JBoss

As configurações podem ser feitas:

No arquivo Standalone.xml, adicionando as seguintes configurações, abaixo da tag de (</jms-connection-factories>):

<jms-destinations>
<jms-queue name=”nomeDaFila”>
<entry name=”java:/nomeDaFila”/>
</jms-queue>
<jms-topic name=”nomeDoTopico”>
<entry name=”java:/nomeDoTopico”/>
</jms-topic>
</jms-destinations>

(Sinceramente não fiz o teste adicionando diretamente no Standalone.xml)

ou também, diretamente no console do JBoss:

Filas – (Profile>Messaging>Messaging Provider>JMS Destinations>Queue),

definindo a jndi como “java:/(nomeDaFila)”;

Tópicos – (Profile>Messaging>Messaging Provider>JMS Destinations>Topics),

definindo a jndi como “java:/(nomeDoTóico)”;

—–o—–o—–o—–o—–o—–o—–o—–o—–o—–o—–o—–o—–o—–o—–o—–o—–o—–o—–o—–o—-

O objetivo deste post é ajudar a outros pois tive alguns obstáculos e acredito que alguns assim

como eu estão tendo dificuldades na implementação de JMS, ainda mais quando se trata da

implementação do mesmo com Annotations, pois a maioria das documentações (pelo menos as

que eu encontrei) estavam configuradas de outra forma como veremos no proximo post que será

sobre a implementação. Então espero que este post seja de grande valia, qualquer dúvida por

favor, comentem.

Um grande abraço a todos e que Deus abençoe teu dia. =D

OBS1: Antes de qualquer alteração no arquivo Standalone.xml, faça um backup do mesmo.

OBS2: Caso hajam erros no deploy do JBoss, é bem possível que certas propriedades de encoding
do Standalone.xml estejam diferentes, então delete as aspas originais e substitua, por exemplo

no meu caso, tive que substituir algumas aspas e em poucos casos tive  uma ” trocada por ?

Mas logo que alterado funcionou perfeitamente

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>