Treinamento HornetQ
Agenda
• Persistência
– Mecanismo de Persistência
– Implementações de Journals
– Asynchronous I/O
– Tipos de Journal
– Instalado LibAIO
Persistência
• Mecanismo de Persistência
– Não utiliza banco de dados.
– Possui mecanismo de persistência próprio baseado em
arquivo.
– Utiliza técnica de Journal para persistência.
Persistência
• Mecanismo de Persitência
– Conceito de Journal
• É o processo de armazenar eventos em um log antes
que cada um possa ser aplicado no sistema. Esses logs
são chamados de journals.
• São utilizados por exemplo em SGBDs e Sistemas de
Arquivo.
Persistência
• Mecanismo de Persitência
– HornetQ Journal
• Conjunto de arquivos pré-criados e de tamanho prédefinido, onde o HornetQ realiza appends.
• Quando o journal atinge seu limite o HornetQ Journal
move para o próximo.
• Operações suportadas:
– Inclusão de mensagens
– Remoção de mensagens
– Alteração de mensagens
Persistência
• Mecanismo de Persitência
– HornetQ Journal

Mensagem 1
Mensagem 2
Mensagem 3
Mensagem 4
Mensagem 5

Journal de 10Mb
Persistência
• Mecanismo de Persitência
– HornetQ Journal
• Possue poderoso recurso para tratamento dos Journals.
– Remoção de espaços não utilizados
– Compactação de dados

• Suporta operações transacionais
– Local Transactions
– XA Transactions
Persistência
• Implementações de Journals
– Suporta nativamente dois tipos de implementações, são
elas:
• Java NIO
–
–
–
–

Faz a interface com o sistema de arquivo
Extremamente rápida
Roda em qualquer plataforma
Precisa do Java 6 ou superior

• Linux Asynchronous IO
– Específica para ambientes Linux
– Interage diretamente com o Kernel
– Precisa do Kernel 2.6 ou superior
Persistência
• Asynchronous I/O
– Seu objetivo é um permitir que um processo execute
várias operações de escrita/leitura sem ter que bloquear
ou aguarda que um outro seja concluído.
– Possue patches para versão 2.4 do kernel.
– Funciona apenas nos seguintes sistemas de arquivo:
•
•
•
•
•

ext2
ext3
ext4
jfx
xfs
Persistência
• Asynchronous I/O (non-blocking)
1 - O pedido de leitura retorna imediatamente, indicando que a leitura foi
iniciada com êxito.
2 - O aplicativo executa outro processamento.
3 – Quando a resposta de leitura chegar um sinal é enviado.
Persistência
• Tipos de Journals
– Existem três tipos, são eles:
• Bindings Journal
• JMS Journal
• Message Journal
Persistência
• Tipos de Journals
– Bindings Journal
• Incluem configurações de filas que são publicadas no servidor
juntamente com seus atributos.
• Sempre utiliza o Java NIO por ter um throughput muito baixo.
• São pré-fixados com hornetq-bindings
• Possuem extensão bindings
• Possuem tamanho de 1Mb
• Está localizado na pasta $HORNETQ_HOME/data/bindings
Persistência
• Tipos de Journals
– JMS Journal
• Armazenam dados relacionados à JMS:
–
–
–
–

Queues
Topics
Connection Factories
Informações de binding JNDI

• Todo recursos criados vias API de gerenciamento (JMX) serão
persistido nesse journal.
•
•
•
•

São pré-fixados com hornetq-jms
Possuem extensão jms
Possuem tamanho de 1Mb
Está localizado na pasta $HORNETQ_HOME/data/bindings
Persistência
• Tipos de Journals
– Message Journal
• Armazena efetivamente todos os dados relacionados a mensagem

• Se o ambiente for Linux e o AIO estiver instalado ele tenta
utilizá-lo, do contrário utiliza Java NIO.
•
•
•
•

São pré-fixados com hornetq-data
Possuem extensão hq
Possuem tamanho de 10Mb
Está localizado na pasta $HORNETQ_HOME/data/journal
Persistência
• Tipos de Journals
– Configurando o Bindings e JMS Journals
• As configurações ficam no arquivo hornetq-configuration.xml

Diretório dos Binding e
JMS Journals
Persistência
• Tipos de Journals
– Configurando o Message Journal
• As configurações ficam no arquivo hornetq-configuration.xml

Quantidade inicial de
Journals

Diretório dos Message
Journal
Persistência
• Tipos de Journals
– Outros parâmetros de configuração importante
• journal-type
– Permite configurar a implementação do journal. Opções: NIO e
ASYNCIO

• journal-max-io
– Total de requisições de escrita que serão enfileiradas antes de serem
submetidas ao SO.
– Usando NIO, deve ser sempre 1
– Usando AIO, por default é 500
– O limite máximo do SO é 65536 (/proc/sys/fs/aio-max-nr)
Persistência
• Tipos de Journals
– Outros parâmetros de configuração importante
• Inserindo novos parametros
Persistência
• Instalando LibAIO
– Pré-Requisitos
•
•
•
•
•
•
•
•

Kernel 2.6 ou superior
Java 6 ou superior
gcc - C Compiler
gcc-c++
autoconf
make
Autoconf
libtool

• libaio
• libaio-dev
Persistência
• Instalando LibAIO
# uname –r

//Verifica a versão do kernel

# find / -name java //Localiza o diretório de instalação do JDK
# export JAVA_HOME=<jdk_path>
# sudo yum install libaio libaio-devel

//Configura a variável de ambiente do JDK
//Instala biblioteca e pacote de desenvolvimento do LibAIO

# sudo yum groupinstall ‘Development Tools’

//Instala as ferramentas necessárias para compilação

# ./HORNETQ_HOME/native-src/bootstrap

//Inicia o processo de compilação

# ls /HORNETQ_HOME/native-src/src/.libs

//Se existir o arquivo libHornetQAIO.so funcionou

# mv /HORNETQ_HOME/native-src/src/.libs / libHornetQAIO.so /HORNETQ_HOME/bin/
libHornetQAIO.so //Deve-se colocar a lib (link simbólico) no classpath

HornetQ - 4.Persistência

  • 1.
  • 2.
    Agenda • Persistência – Mecanismode Persistência – Implementações de Journals – Asynchronous I/O – Tipos de Journal – Instalado LibAIO
  • 3.
    Persistência • Mecanismo dePersistência – Não utiliza banco de dados. – Possui mecanismo de persistência próprio baseado em arquivo. – Utiliza técnica de Journal para persistência.
  • 4.
    Persistência • Mecanismo dePersitência – Conceito de Journal • É o processo de armazenar eventos em um log antes que cada um possa ser aplicado no sistema. Esses logs são chamados de journals. • São utilizados por exemplo em SGBDs e Sistemas de Arquivo.
  • 5.
    Persistência • Mecanismo dePersitência – HornetQ Journal • Conjunto de arquivos pré-criados e de tamanho prédefinido, onde o HornetQ realiza appends. • Quando o journal atinge seu limite o HornetQ Journal move para o próximo. • Operações suportadas: – Inclusão de mensagens – Remoção de mensagens – Alteração de mensagens
  • 6.
    Persistência • Mecanismo dePersitência – HornetQ Journal Mensagem 1 Mensagem 2 Mensagem 3 Mensagem 4 Mensagem 5 Journal de 10Mb
  • 7.
    Persistência • Mecanismo dePersitência – HornetQ Journal • Possue poderoso recurso para tratamento dos Journals. – Remoção de espaços não utilizados – Compactação de dados • Suporta operações transacionais – Local Transactions – XA Transactions
  • 8.
    Persistência • Implementações deJournals – Suporta nativamente dois tipos de implementações, são elas: • Java NIO – – – – Faz a interface com o sistema de arquivo Extremamente rápida Roda em qualquer plataforma Precisa do Java 6 ou superior • Linux Asynchronous IO – Específica para ambientes Linux – Interage diretamente com o Kernel – Precisa do Kernel 2.6 ou superior
  • 9.
    Persistência • Asynchronous I/O –Seu objetivo é um permitir que um processo execute várias operações de escrita/leitura sem ter que bloquear ou aguarda que um outro seja concluído. – Possue patches para versão 2.4 do kernel. – Funciona apenas nos seguintes sistemas de arquivo: • • • • • ext2 ext3 ext4 jfx xfs
  • 10.
    Persistência • Asynchronous I/O(non-blocking) 1 - O pedido de leitura retorna imediatamente, indicando que a leitura foi iniciada com êxito. 2 - O aplicativo executa outro processamento. 3 – Quando a resposta de leitura chegar um sinal é enviado.
  • 11.
    Persistência • Tipos deJournals – Existem três tipos, são eles: • Bindings Journal • JMS Journal • Message Journal
  • 12.
    Persistência • Tipos deJournals – Bindings Journal • Incluem configurações de filas que são publicadas no servidor juntamente com seus atributos. • Sempre utiliza o Java NIO por ter um throughput muito baixo. • São pré-fixados com hornetq-bindings • Possuem extensão bindings • Possuem tamanho de 1Mb • Está localizado na pasta $HORNETQ_HOME/data/bindings
  • 13.
    Persistência • Tipos deJournals – JMS Journal • Armazenam dados relacionados à JMS: – – – – Queues Topics Connection Factories Informações de binding JNDI • Todo recursos criados vias API de gerenciamento (JMX) serão persistido nesse journal. • • • • São pré-fixados com hornetq-jms Possuem extensão jms Possuem tamanho de 1Mb Está localizado na pasta $HORNETQ_HOME/data/bindings
  • 14.
    Persistência • Tipos deJournals – Message Journal • Armazena efetivamente todos os dados relacionados a mensagem • Se o ambiente for Linux e o AIO estiver instalado ele tenta utilizá-lo, do contrário utiliza Java NIO. • • • • São pré-fixados com hornetq-data Possuem extensão hq Possuem tamanho de 10Mb Está localizado na pasta $HORNETQ_HOME/data/journal
  • 15.
    Persistência • Tipos deJournals – Configurando o Bindings e JMS Journals • As configurações ficam no arquivo hornetq-configuration.xml Diretório dos Binding e JMS Journals
  • 16.
    Persistência • Tipos deJournals – Configurando o Message Journal • As configurações ficam no arquivo hornetq-configuration.xml Quantidade inicial de Journals Diretório dos Message Journal
  • 17.
    Persistência • Tipos deJournals – Outros parâmetros de configuração importante • journal-type – Permite configurar a implementação do journal. Opções: NIO e ASYNCIO • journal-max-io – Total de requisições de escrita que serão enfileiradas antes de serem submetidas ao SO. – Usando NIO, deve ser sempre 1 – Usando AIO, por default é 500 – O limite máximo do SO é 65536 (/proc/sys/fs/aio-max-nr)
  • 18.
    Persistência • Tipos deJournals – Outros parâmetros de configuração importante • Inserindo novos parametros
  • 19.
    Persistência • Instalando LibAIO –Pré-Requisitos • • • • • • • • Kernel 2.6 ou superior Java 6 ou superior gcc - C Compiler gcc-c++ autoconf make Autoconf libtool • libaio • libaio-dev
  • 20.
    Persistência • Instalando LibAIO #uname –r //Verifica a versão do kernel # find / -name java //Localiza o diretório de instalação do JDK # export JAVA_HOME=<jdk_path> # sudo yum install libaio libaio-devel //Configura a variável de ambiente do JDK //Instala biblioteca e pacote de desenvolvimento do LibAIO # sudo yum groupinstall ‘Development Tools’ //Instala as ferramentas necessárias para compilação # ./HORNETQ_HOME/native-src/bootstrap //Inicia o processo de compilação # ls /HORNETQ_HOME/native-src/src/.libs //Se existir o arquivo libHornetQAIO.so funcionou # mv /HORNETQ_HOME/native-src/src/.libs / libHornetQAIO.so /HORNETQ_HOME/bin/ libHornetQAIO.so //Deve-se colocar a lib (link simbólico) no classpath