Post on 29-Jun-2015
Treinamento HornetQ
Agenda
• Agenda– Overview– Acceptors– Connectors– Dinâmica de Funcionamento– Configuração do Netty
Transporte
• Overview– Transporte diz respeito ao mecanismo de
comunicação entre o cliente e HornetQ.– Seu mecanismo de comunicação padrão é
baseado na biblioteca Netty.– A camada de transporte tem arquitetura plugável.• Qualquer um pode desenvolver seu próprio mecanismo
de transporte (SPI – Service Provider Interface)
Transporte
• Overview– O que é Netty?• Framework para desenvolvimento de aplicações em
rede baseado em eventos assincronos.• Principais características:– Performance»Melhor throughput e baixa latência» Baixo consumo de memória
– Segurança» Suportar SSL/TLS e StartTLS
Transporte
• Acceptors– Define a maneira a qual as conexões serão feita ao
HornetQ.– Configurações definidas no arquivo hornetq-
configuration.xml.
Transporte
• Acceptorshornetq-configuration.xml.
– Acceptor são definidos dentro da tag <acceptors>– Pode existir mais de um <acceptor> dentro do <acceptors>
Transporte
• Acceptorshornetq-configuration.xml.
– Estamos dizendo que as conexões serão aceitas via Netty e o servidor escutará solicitações na porta 5446.
Fábrica utilizada para criar o Acceptor
Aceita conexão de qualquer host. (Seja
cauteloso)
Porta em que o servidor estará ouvindo as
conexões.
Transporte
• Connectors– Eles falam como os clientes devem se conectar ao
HornetQ.– Suas configurações também são definidas no
arquivo hornetq-configuration.xml.
Transporte
• Acceptorshornetq-configuration.xml.
– Connector são definidos dentro da tag <connectors>– Pode existir mais de um <connector> dentro do
<connectors>
Transporte
• Connectorshornetq-configuration.xml.
– Estamos dizendo: Quero me conectar ao servidor “localhost” utilizando o Netty na porta 5446.
Fábrica utilizada para criar o Connector
IP do host HornetQ.
Porta do host que se deseja conectar.
Transporte
• Dinâmica de Funcionamento
Servidor HornetQIP: 192.168.1.110
Cliente HornetQ
1 – Cliente faz lookup JNDI na Connection Factory
2 – Servidor informa ao cliente o IP e Porta para conexão
3 – O Cliente faz a conexão com o servidor
É importante que o acceptor esteja
configurado para aceitar conexão do cliente e a
porta seja a mesma informada no connector
Transporte
• Dinâmica de Funcionamento– Requisitos para que a conexão seja estabelecida
remotamente.1. Liberar o acesso remoto ao servidor JNDI do HornetQ
no arquivo hornetq-beans.xml.2. Configurar o acceptor e o connector no arquivo
hornetq-configuration.xml3. Associar a ConnectionFactory ao connector no
arquivo hornetq-jms.xml.
Transporte
• Dinâmica de Funcionamento– Requisitos para que a conexão seja estabelecida
remotamente.• Liberar o acesso remoto ao servidor JNDI do HornetQ
no arquivo hornetq-beans.xml.Substitua “localhost” pelo IP
do servidor.
Transporte
• Dinâmica de Funcionamento– Requisitos para que a conexão seja estabelecida
remotamente.• Configurar o acceptor e o connector no arquivo
hornetq-configuration.xmlIP do servidor HornetQ.
As portas devem ser as mesma.
De qual host o servidor aceitará conexão. Valor
0.0.0.0 aceita conexões de qualquer hosts.
Transporte
• Dinâmica de Funcionamento– Requisitos para que a conexão seja estabelecida
remotamente.• Associar a ConnectionFactory ao connector no arquivo
hornetq-jms.xml.
hornetq-configuration.xml
hornetq-jms.xml
Transporte
• Configuração do Netty– Netty suporta os seguintes mecanismo de transporte:• Sockets TCP• SSL• HTTP/HTTPS• Servlet
Daremos atenção especial a esses
Transporte
• Configuração do Netty– Sockets TCP• Mecanismo de transporte padrão• Comunicação insegura• Pode ser configurado para utilizar:– Java IO– Java NIO
Transporte
• Configuração do Netty– Sockets TCP• Java IO– Algumas vezes é possível conseguir melhor latência.
Útil quando o servidor manipula pouca requisições.• Java NIO– Escala melhor que o anterior quando há
necessidade de muitas conexões simultâneas.
Transporte
• Configuração do Netty– Sockets TCP• Java IO / NIO
Por padrão é FALSE, ou seja, não utiliza JAVA NIO.
Transporte
• Configuração do Netty– Outros Parâmetros Importantes:• tcp-send-buffer-size
– Tamanho do buffer em bytes do lado cliente que será utilizado para armazenar as mensagens antes que elas sejam enviadas. Deve está associada a largura da banda da rede. Valor padrão 32 Kb.
– Buffer = Largura da Banda * RTT
• nio-remote-threads– Quantidade de threads criadas pelo NIO para
encaminhamento de pacotes ao servidor. Valor padrão -1, que significa que é a quantidade de processadores * 3.
Transporte
• Configuração do Netty– Outros Parametros Importantes:
Quando falarmos de tunning, aprenderemos
como configurá-lo de forma adequada.
Transporte
• Configuração do Netty– SSL• Mecanismo de sockets acrescido de criptografia.• Consiste basicamente no uso de certificado digital.• Envolve configuração do connector e acceptor.• Parametros
– ssl-enabled– key-store-path– key-store-password– trust-store-path– trust-store-password
Transporte
• Configuração do Netty– SSL• Será utilizado o keystore e certificado dos samples
do HornetQ.– Diretório $HORNETQ_HOME/examples/jms/ssl-
enabled/server0» hornetq.example.keystore» hornetq.example.truststore
• Os arquivos ficaram no diretório $HORNETQ_HOME/config/stand-alone/non-clustered
Transporte
• Configuração do Netty– SSL• Configurando o Connector Ativa o SSL
Caminho da keystore no cliente.
O cliente precisa do arquivo localmente.Senha da keystore
Não é necessária nenhuma alteração nos clientes.
Transporte
• Configuração do Netty– SSL• Configurando o Acceptor
Ativa o SSL
Caminho da keystore no
servidor.
Senha da keystore
Caminho do certificado.Senha do
certificado