TDC 2011 - HornetQ e SwitchYard

Preview:

Citation preview

Mensageria com HornetQ e o futuro do projeto SwitchYard

Samuel Tauil Middleware Instructor, Red Hat

WHO AM I?

E finalmente o que é JMS e mensageria?

API Java que encapsula destinos de mensagens e padrões de publicação e leitura de mensagens.

Parte da especificação Java EE.

Mas e o JBoss Messaging?

> HornetQ é o JBoss Messaging 2.

> JBM têm 95%+ de diferença no codebase.

> EOL, novas funcionalidades no HornetQ.

> Persistência em BD.

> Suportado no JBoss EAP.

Why so horny?

> open source

> multiprotocolo

> embarcável

> foco em performance

> clusterizável

> assíncrono

Usabilidade

> Core API simples

> Configuração rápida e fácil

> Documentação completa (português em breve)

> Grande quantidade de exemplos

> Dependências reduzidas

Standalone!

> Não precisa de um Application Server.

> Integração JBoss AS 4.x e 5.x via JCA Adapter.● @ResourceAdapter("hornetq-ra.rar")

> JMS Provider padrão no JBoss AS 6.

> Zero dependências do JBoss AS.

> POJO design.

Standalone!

Configuration configuration = new ConfigurationImpl();

configuration.getAcceptorConfigurations().add(

new TransportConfiguration(InVMAcceptorFactory.class.getName()));

HornetQServer server = HornetQServers.newHornetQServer(configuration);

server.start();

Arquitetura

JMSJMSFacadeFacade Core APICore API

HornetQHornetQServerServer

POJOsPOJOs

Arquitetura

StorageStorageJournalJournal

Large MessagesLarge Messages

PagingPaging

RemoteRemoteNettyNetty

NativeNative

StompStomp

ManagementManagement

Stomp ClientsStomp Clients

Rest ClientsRest Clients JMS Server JMS Server ManagerManager

JMSJMSFacadeFacade Core APICore API

HornetQHornetQServerServer

Arquitetura

HornetQHornetQServerServer

JournalJournalContextContext

Timed BufferTimed Buffer

nionio libaiolibaio

JNIJNIUso de JNI

mínimo

Async

● arquivos pre-filled● libaio ou Java NIO

Arquitetura

> POJOs

> Embarcável

> Injetável por qualquer container de DI● JBoss Microcontainer● Spring● Google Guice

Protocolos

> Implementação JMS 1.1 spec

> RESTful API

> STOMP

> Transporte HTTP

> Transporte inVM

> XMPP (pipeline)

Funcionalidades

> Gerenciamento via JMX

> ACKs assíncronos

> Agendamento de mensagens

> Paginação de mensagens

> Suporte a mensagens grandes

> Last Value queue

> E muito mais em: ● http://community.jboss.org/wiki/HornetQFeatures

Componentes

> JNDIServer

> MBeanServer

> Configuration

> HornetQSecurityManager

> HornetQServer

Configurando um Divert

> Apenas para queues local x local

> Servidor externo: Divert + Bridge

Exemplo:

<divert name="pedidos-divert">

<address>jms.queue.pedidos</address>

<forwarding-address>jms.topic.estatisticas</forwarding-address>

<exclusive>false</exclusive>

</divert>

A hora da(o) demo

JSR-343, o que vem por aí?

> Integração com CDI (JSR-299).

> Obrigatoriedade da implementação de RA.

> Anotações padronizadas.

> Full suporte Java EE 7.

> Suporte assíncrono.● Envio de response depois de um método de

callback ser chamado.

Performance

Mensag/Seg0

50000

100000

150000

200000

250000

300000

ActiveMQSwiftMQHornetQOpenMQ

Relatório completo em: http://www.jboss.org/hornetq

Performance

http://www.spec.org/jms2007/results/jms2007.html

SwitchYard

● Novo projeto para a construção da nova geração de ESB.

● Foco em consistência e usabilidade.● Runtime embarcável● POJO based● Integração com CDI

Exemplo de Serviço@Service(PedidoService.class)

public class PedidoServiceBean implements PedidoService {

@Inject @Reference

private ItemService itemService;

public PedidoAck enviarPedido(Pedido pedido) {

Item item = itemService.buscarItem(pedido.getItemId());

// ...... cria ack

}

}

Development Tools

● Seam Forge● Maven (Hell! XML também)● JBDS● Camel Routes

Obrigado!

> Samuel Tauil

samuel@redhat.com

http://about.me/samueltauil

> Clebert Suconic

irc://freenode.net:6667#hornetqhttp://jboss.org/hornetq

http://twitter.com/hornetq

http://hornetq.blogspot.com