mensagens leve (invocações assíncronas) em Java
Pergunta
Eu estou procurando quadro de mensagens leve em Java. Minha tarefa é processar eventos em forma de um SEDA:. Sei que algumas etapas do processamento pode ser concluída rapidamente, e outros não, e gostaria de dissociar esses estágios de processamento
Vamos dizer que eu tenho componentes A e B e processamento motor (se a embalagem ou qualquer outra coisa) invoca um componente, que por invoca volta B. componente Eu não me importo se o tempo de execução do componente B será 2s, mas eu faço importo se o tempo de execução de um componente é inferior a 50ms, por exemplo. Portanto, parece mais razoável para um componente para enviar uma mensagem para B, que B irá processar no momento desejado.
Estou ciente de diferentes implementações de JMS e Apache ActiveMQ: eles são muito pesado para isso. Eu procurei por alguns mensagens leve (com características muito básicas, como mensagens de serialização e roteamento mais simples) sem sucesso.
Você tem alguma coisa para recomendar nesta edição?
Solução
Você precisa de qualquer tipo de persistência (por exemplo, se o seu dies JVM em entre o processamento de milhares de mensagens) e você precisa de mensagens para atravessar a quaisquer outros JVMs?
Se seu tudo em uma única JVM e você não precisa se preocupar com as transações, recuperação ou perda de mensagem se uma JVM dies -., Em seguida, como Chris diz acima, executores são muito bem
ActiveMQ é bastante leve; você pode usá-lo em uma única JVM sem persistência, se você quiser; então você pode permitir transações / persistência / recuperação / comunicação remota (trabalhando com várias JVMs) como e quando você precisar dele. Mas se você precisa de nenhuma dessas coisas, então sua Overkill -. Basta usar Executores
A propósito outra opção se você não tem certeza que os passos necessidade poder persistência / confiabilidade ou balanceamento de carga para várias JVMs seria esconder o uso de middleware completamente para que você possa alternar entre na memória SEDA filas com executores de JMS / ActiveMQ como e quando você precisar.
por exemplo. pode ser que algumas medidas precisam ser confiáveis ??e recuperável (assim a necessidade de algum tipo de persistência) e outras vezes não.
Outras dicas
realmente leve? Executores . :-) Então você configurar um executor (B, na sua descrição), e A submete simplesmente tarefas para o executor.
Eu acho Apache Camel abrange todas as suas necessidades. É obras dentro do estilo SEDA JVM e suportes ( http://camel.apache.org/seda.html ) e roteamento simpe. Pode ser usado em seu próprio, ou com mola, com um provedor JMS ou outros adaptadores.
Infelizmente para ressuscitar uma discussão antiga, mas talvez ajude alguém lê-lo ... Eu acho FFMQ é um bom candidato para um quadro de mensagens leve.
UPDATE: no entanto eu não tenho certeza se ele suporta atrasos reentrega (o problema de inatividade-fila). Eu iria encontrar este mesmo utilizável para provedores leves. Mas eu acho que poderia ser possível com uma combinação de propriedades de consulta e mensagens MessageSelector.
Para obter ajuda para alguém ler este tópico:
Um do quadro de mensagens mais leve é ?? Mbasseder .
MBassador é um peso-leve implementação muito mensagem (evento) de ônibus após a publicar subscrever padrão. Ele é projetado para facilidade de uso e pretende ser rico em recursos e extensível, preservando a eficiência dos recursos e desempenho.
O núcleo de alta performance de MBassador é uma estrutura de dados especializada que minimiza a possibilidade de contenção de modo a que a degradação de acesso simultâneo desempenho é mínima.
Características: definição ouvinte declarativa através de anotações, sincronização e / ou entrega de eventos assíncrona, fracas referências, filtragem de mensagens