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 hornetqconfiguration.xml.
Transporte
• Acceptors
hornetq-configuration.xml.

– Acceptor são definidos dentro da tag <acceptors>
– Pode existir mais de um <acceptor> dentro do <acceptors>
Transporte
• Acceptors
hornetq-configuration.xml.

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.

– Estamos dizendo que as conexões serão aceitas via Netty e
o servidor escutará solicitações na porta 5446.
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
• Acceptors
hornetq-configuration.xml.

– Connector são definidos dentro da tag <connectors>
– Pode existir mais de um <connector> dentro do
<connectors>
Transporte
• Connectors
hornetq-configuration.xml.

Fábrica utilizada para
criar o Connector

IP do host HornetQ.
Porta do host que se
deseja conectar.

– Estamos dizendo: Quero me conectar ao servidor
“localhost” utilizando o Netty na porta 5446.
Transporte
• Dinâmica de Funcionamento
2 – Servidor informa ao cliente o
IP e Porta para conexão

É importante que o
acceptor esteja
configurado para aceitar
conexão do cliente e a
porta seja a mesma
informada no connector

3 – O Cliente faz a conexão
com o servidor

Cliente HornetQ
Servidor HornetQ
IP: 192.168.1.110
1 – Cliente faz lookup JNDI na
Connection Factory
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.xml
3. 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.xml

IP 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-jms.xml

hornetq-configuration.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/sslenabled/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

Senha da keystore

Não é necessária nenhuma alteração nos clientes.

Caminho da
keystore no
cliente. O cliente
precisa do arquivo
localmente.
Transporte
• Configuração do Netty
– SSL

Ativa o SSL

Caminho da
keystore no
servidor.

• Configurando o Acceptor

Senha da keystore

Senha do
certificado

Caminho do
certificado.

HornetQ - 5.Transports

  • 1.
  • 2.
    Agenda • Agenda – Overview –Acceptors – Connectors – Dinâmica de Funcionamento – Configuração do Netty
  • 3.
    Transporte • Overview – Transportediz 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)
  • 4.
    Transporte • Overview – Oque é 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
  • 5.
    Transporte • Acceptors – Definea maneira a qual as conexões serão feita ao HornetQ. – Configurações definidas no arquivo hornetqconfiguration.xml.
  • 6.
    Transporte • Acceptors hornetq-configuration.xml. – Acceptorsão definidos dentro da tag <acceptors> – Pode existir mais de um <acceptor> dentro do <acceptors>
  • 7.
    Transporte • Acceptors hornetq-configuration.xml. Fábrica utilizadapara criar o Acceptor Aceita conexão de qualquer host. (Seja cauteloso) Porta em que o servidor estará ouvindo as conexões. – Estamos dizendo que as conexões serão aceitas via Netty e o servidor escutará solicitações na porta 5446.
  • 8.
    Transporte • Connectors – Elesfalam como os clientes devem se conectar ao HornetQ. – Suas configurações também são definidas no arquivo hornetq-configuration.xml.
  • 9.
    Transporte • Acceptors hornetq-configuration.xml. – Connectorsão definidos dentro da tag <connectors> – Pode existir mais de um <connector> dentro do <connectors>
  • 10.
    Transporte • Connectors hornetq-configuration.xml. Fábrica utilizadapara criar o Connector IP do host HornetQ. Porta do host que se deseja conectar. – Estamos dizendo: Quero me conectar ao servidor “localhost” utilizando o Netty na porta 5446.
  • 11.
    Transporte • Dinâmica deFuncionamento 2 – Servidor informa ao cliente o IP e Porta para conexão É importante que o acceptor esteja configurado para aceitar conexão do cliente e a porta seja a mesma informada no connector 3 – O Cliente faz a conexão com o servidor Cliente HornetQ Servidor HornetQ IP: 192.168.1.110 1 – Cliente faz lookup JNDI na Connection Factory
  • 12.
    Transporte • Dinâmica deFuncionamento – 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.xml 3. Associar a ConnectionFactory ao connector no arquivo hornetq-jms.xml.
  • 13.
    Transporte • Dinâmica deFuncionamento – 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.
  • 14.
    Transporte • Dinâmica deFuncionamento – Requisitos para que a conexão seja estabelecida remotamente. • Configurar o acceptor e o connector no arquivo hornetq-configuration.xml IP 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.
  • 15.
    Transporte • Dinâmica deFuncionamento – Requisitos para que a conexão seja estabelecida remotamente. • Associar a ConnectionFactory ao connector no arquivo hornetq-jms.xml. hornetq-jms.xml hornetq-configuration.xml
  • 16.
    Transporte • Configuração doNetty – Netty suporta os seguintes mecanismo de transporte: • • • • Sockets TCP SSL HTTP/HTTPS Servlet Daremos atenção especial a esses
  • 17.
    Transporte • Configuração doNetty – Sockets TCP • Mecanismo de transporte padrão • Comunicação insegura • Pode ser configurado para utilizar: – Java IO – Java NIO
  • 18.
    Transporte • Configuração doNetty – 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.
  • 19.
    Transporte • Configuração doNetty – Sockets TCP • Java IO / NIO Por padrão é FALSE, ou seja, não utiliza JAVA NIO.
  • 20.
    Transporte • Configuração doNetty – 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.
  • 21.
    Transporte • Configuração doNetty – Outros Parametros Importantes: Quando falarmos de tunning, aprenderemos como configurá-lo de forma adequada.
  • 22.
    Transporte • Configuração doNetty – 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
  • 23.
    Transporte • Configuração doNetty – SSL • Será utilizado o keystore e certificado dos samples do HornetQ. – Diretório $HORNETQ_HOME/examples/jms/sslenabled/server0 » hornetq.example.keystore » hornetq.example.truststore • Os arquivos ficaram no diretório $HORNETQ_HOME/config/stand-alone/non-clustered
  • 24.
    Transporte • Configuração doNetty – SSL • Configurando o Connector Ativa o SSL Senha da keystore Não é necessária nenhuma alteração nos clientes. Caminho da keystore no cliente. O cliente precisa do arquivo localmente.
  • 25.
    Transporte • Configuração doNetty – SSL Ativa o SSL Caminho da keystore no servidor. • Configurando o Acceptor Senha da keystore Senha do certificado Caminho do certificado.