Pergunta

Eu sou um Noob ActiveMQ / Camel com um cenário específico em mente, gostaria de saber, em primeiro lugar, se é possível e por outro lado se alguém pode fornecer um pouco de direção.

Basicamente eu preciso para executar regulagem dinâmica da fila. I.E a capacidade de definir em tempo de execução a taxa de um grupo particular de mensagens será consumida a partir da fila.

Então, eu poderia, por exemplo, adicionar um grupo de mensagens que estão a ser consumido em 10 por segundo, um outro grupo que deve ser consumido a 1 por segundo e assim por diante.

Eu sei o básico de criação de rotas em camelo e mensagem de agrupamento para a fila etc, mas simplesmente não consegue descobrir isso a partir dos docs.

Foi útil?

Solução

Sim parece que você está procurando estrangulamento lado corretor para os consumidores a evitar a bloco.

Você já levantou o seu pedido no fórum de usuários ActiveMQ / dev?

Outras dicas

Você pode usar apenas do Camel existente throttler em seguida, usando uma fila diferente para cada tipo de mensagens em que você precisa para configurar uma taxa de aceleração diferente?

por exemplo.

from("activemq:Queue1.Input").
    throttle(20).
    to("activemq:Queue1.Output");  
from("activemq:Queue2.Input").
    throttle(5).
    to("activemq:Queue2.Output");  

Por que você não adicionar um RFE no Apache Camel JIRA?

O que são a sua lógica para determinar a taxa para um determinado grupo de mensagens?

Se for diferente grupo de mensagens passa ao longo do mesmo throttler ele pode ficar complexo. Ele precisa meio discriminador para determinar qualquer mensagem que o grupo a que pertence e, portanto, que a taxa é deve passar o throttler com.

Se você levar algum tempo para preencher o seu caso de uso e registrar o RFE, então estou certo a comunidade Camel, os desenvolvedores podem ajudar.

Você pode tentar implementá-lo. Basicamente qualquer coisa é um processador, para que possa fazer um a partir de ( "activemq: fila: foo") processo (myOwnThrottler) .para ( "bean: handleMessage");.

Você pode estender algumas das classes em Camel: - DelegateProcessor - DelayProcessorSupport - Throttler


Claus Ibsen Apache Camel Committer

Open Integração Fonte: http://fusesource.com Blog: http://davsclaus.blogspot.com/

OK, eu vou colocar para fora o cenário em um pouco mais detalhadamente e destacar o bloqueador principal, tanto quanto eu posso dizer.

Eu tenho 2 grupos de mensagens (na realidade, a escala com ser muito maior), cada um com uma exigência de estrangulamento diferente - Vamos dizer, eu especificar isso no cabeçalho da mensagem como vazão e flowTime

.
  • Grupo 1: vazão = 1; flowTime = 60 (1 por minuto)
  • Grupo 2: vazão = 1; flowTime = 1 (1 por segundo)

Eu implementar um processador conforme Noel que examina os campos de cabeçalho e usa-los como entrada delayer.

acrescento 20000 mensagens do grupo 1 e 20000 do grupo 2

Porque o throttler é o lado do consumidor, o delayer activado pelo grupo 1 fará com que ele se torne lento por rapidamente enchendo sua memória de entrada e grupo 2 mensagens serão então ficar preso ... mesmo se eu usar várias filas como por James .

Eu percebo que eu pode agrupar a mensagem usando o cabeçalho JMXGroupID e implementar vários consumidores, mas não acho que isso iria reduzir a exigência para acomodar n grupos.

O que eu queria saber, basicamente, é se existe alguma maneira de fazer corretor, em vez de estrangulamento lado do consumidor, ou alguma outra solução, segundo o qual o consumidor pode estrangular sem última instância bloqueio.

Hope eu expliquei-me claramente e obrigado pelas sugestões até agora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top