Giter Club home page Giter Club logo

jms-practical-example's Introduction

JMS com ActiveMQ

Download ActiveMQ aqui.

Execução do ActiveMQ:

./activemq console

Explicações

  • Fila (Queue): As filas dividem as mensagens entre os consumidores, uma mensagem x só poderá ser entregue a um dos consumidores interessados.
  • Topico (Topic): Os topicos distribuem as mensagens entre os consumidores, assim a mesma mensagem pode ser entregue a mais de um consumidor interessado. O consumidor de um topico precisa se indentificar ao menos uma vez para que as mensagens sejam guardadas quando o consumidor estiver indisponível. Existe também a possibilidade de criar um selector para um consumidor, assim serão consumidas apenas as mensagens que satisfazem a condição pré estabelecida, os selectors possuem uma sintaxe parecida com SQL e buscam valores apenas nos headers (cabeçalho) e properties (propriedades) das mensagens.

Adicionando restrição de acesso

Definindo usuários e grupos Para definir usuários e seus grupos devemos usar plugins do ActiveMQ, no nosso caso um plugin de autenticação e outro de autorização. O primeiro passo é adicionar no arquivo conf/activemq.xml os usuários, senhas e seus grupos através do .

No XML, logo após o elemento <broker ...> adicione:

<plugins>
  <simpleAuthenticationPlugin anonymousAccessAllowed="false">
    <users>
        <authenticationUser username="admin" password="admin" groups="users,admins"/>
        <authenticationUser username="user" password="senha" groups="users"/>
        <authenticationUser username="guest" password="senha" groups="guests"/>
    </users>
  </simpleAuthenticationPlugin>

  <!-- aqui vem ainda o authorizationPlugin -->
</plugins>

Repare que configuramos anonymousAccessAllowed="false". Isso significa que não podemos mais conectar ao ActiveMQ sem ter um usuário definido. Ao executar o código Java que realiza a conexão, recebemos uma exceção:

java.lang.SecurityException: User name [null] or password is invalid.COPIAR CÓDIGO

Faz todo sentido pois agora devemos nos autenticar!

Usando uma conexão com usuário e senha Para definir o user name e password devemos mexer no código Java. Para nos conectar ao ActiveMQ sempre usamos o método createConnection() da interface ConnectionFactory. Esse método é sobrecarregado e possui uma versão que recebe o user name e password:

Connection connection = cf.createConnection("user", "senha");

Ao reiniciar o ActiveMQ com plugin de autenticação configurado podemos estabelecer uma conexão autenticada através do código Java!

Definindo permissões Agora só falta dizer quais são as permissões de cada grupo. Existem 3 permissões disponíveis:

leitura (read); escrita (write); administrativa (admin). Cada permissão fica associada a um tópico/fila e aos seus grupos. Repare que usamos os grupos users, admins e guests. Sabendo disso, segue um exemplo de autorização para o tópico comercial:

COPIAR CÓDIGO O grupo users pode ler, escrever e administrar o tópico e o grupo admin também possui a permissão administrativa.

A configuração completa deve ser feita dentro do arquivo conf/activemq.xml, dentro do elemento . No nosso exemplo o grupo users tem acesso completo às destinations financeiro e comercial:

<authorizationPlugin>
    <map>
      <authorizationMap>
        <authorizationEntries>
          <authorizationEntry queue="fila.financeiro" read="users" write="users" admin="users,admins" />
          <authorizationEntry topic="comercial" read="users" write="users" admin="users,admins" />
          <authorizationEntry topic="ActiveMQ.Advisory.>" read="users,admins" write="users,admins" admin="users,admins"/>
        </authorizationEntries>
        <tempDestinationAuthorizationEntry>
          <tempDestinationAuthorizationEntry read="admin" write="admin" admin="admin"/>
        </tempDestinationAuthorizationEntry>
      </authorizationMap>
    </map>
</authorizationPlugin>

Além do nosso tópico comercial e a fila financeira, existe uma terceira configuração relacionada ao tópico ActiveMQ.Advisory.. Esse tópico já existe por padrão no ActiveMQ e recebe mensagens administrativas (AdvisoryMessage) sempre que for criado um consumer, producer e um novo destination. Mais infos em: http://activemq.apache.org/advisory-message.html

Uma vez feita toda a configuração dos plugins, basta reiniciar o ActiveMQ. Além disso, como já falamos, devemos usar no código Java o usuário e a senha para nos conectar corretamente com a fila financeiro ou com o tópico comercial.

Você pode ver a configuração completa nesse arquivo: activemq.xml

jms-practical-example's People

Contributors

alexandre-mendes avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.