WebSphere MQ Baixa Mensagem de Latência - Ele tem uma API JMS (ou JMS LIFT)?

StackOverflow https://stackoverflow.com/questions/1543996

  •  20-09-2019
  •  | 
  •  

Pergunta

No momento, estamos usando o IBM MQ via JMS, mas parece estar passando por mais mensagens do que ele pode lidar - estranhamente, o problema parece ser intermitente.

As mensagens são preços e, portanto, não precisam ser garantidas, só precisam ser enviadas rapidamente.

Como a IBM tem um Produto de baixa latência, Estou me perguntando se essa é talvez a melhor solução - mas não parece ter uma API JMS, ou pelo menos não facilmente visível.

Alguém sabe se há uma API JMS no produto de baixa latência, ou se a API "única" que ele tem é JMS-Like ...

Como alternativa, as dicas para o ajuste do MQ também seriam apreciadas ... :)

Foi útil?

Solução

Definitivamente, um produto de mensagens de baixa latência seria mais adequado ao seu problema, estou trabalhando em um projeto em que fazemos algo muito semelhante usando um produto de mensagens de baixa latência chamado LBM de 29west. Ele não possui uma API JMS e suspeito que a maioria dos produtos no espaço de baixa latência não. Há um grande número de recursos que não fazem sentido em combinação com esses tipos de produtos (por exemplo, persistência, seletores etc.). Descobrimos que escrever nossa própria API simples no topo do produto de mensagens é bastante fácil e dá uso a flexibilidade de alterar os produtos posteriormente e nos libertar de parte do volume e verbosidade da API JMS.

Outra opção a considerar seria JGroups.

29west adicionaram suporte ao JMS à sua linha de produtos de mensagens.

Outras dicas

Sobre "Ponteiros para o ajuste MQ", no Página de suporte Existem avaliações de desempenho por plataforma com recomendações específicas. Role para baixo até o suporte de suporte chamado MP* e procure a versão e a plataforma apropriadas. Uma variedade de cenários é testada com grandes e pequenas mensagens, persistentes e não persistentes, variações de números de getter e putters, etc.

Como ex -desenvolvedor do produto LLM, posso dizer que sim ou pelo menos o fez. Veja abaixo para um trecho que tirei do Infocenter publicamente disponível para a versão 2.6

Dito isto, pelo que me lembro de todo o ponto de MQ era Entrega garantida. Há um tempo e um lugar para isso, mas tem um custo em termos de latência e largura de banda.

O LLM tem um propósito diferente fundamentalmente; tem entrega confiável: Ou seja, se não for entregar, você simplesmente saberá que não conseguiu entregar. A recuperação dessas mensagens é limitada apenas pelo quanto você está disposto a manter o cache ou o recall do disco e, portanto, quanto tempo você está disposto a tolerar a espera por recuperação enquanto mantém seu processo. No seu caso, você pode não se recuperar. Se o LLM é adequado para você ou não, não posso especular. O que posso dizer é que, do meu ponto de vista, como desenvolvedor passado e, mais tarde, como cliente, encontrei pouca ou nenhuma semelhança entre os dois, e o desempenho do LLM para esse tipo de aplicação explodiu completamente o MQ da água. Eu também nunca usei muito o lado Java/JMS e fiquei focado em C/C ++, então leve isso com um grão de sal. Eu apenas sabia que fazia isso e onde procurar no Google.

http://www-01.ibm.com/support/knowledgecenter/ssqpd3_2.6.0/com.ibm.wllm.doc/api/javadoc/messaging/com/ibm/llm/jms/package-summary.html

Pacote com.ibm.llm.jms Descrição

Implemente as classes públicas específicas do provedor para o cliente LLM JMS.

A maioria das interfaces usadas no JMS é definida pelas interfaces JMS comuns. No entanto, a especificação JMS não inclui as classes e interfaces necessárias para configurar o cliente JMS.

Consulte a documentação da API JMS para obter informações sobre as classes e métodos JMS.

Introdução

O LLM JMS Client fornece uma interface Java Message Service (JMS) para LLM. O uso da interface JMS para o LLM permite uma interface comum com outros provedores de mensagens e acelera o desenvolvimento de aplicativos, permitindo que os desenvolvedores usem interfaces com os quais estão familiarizados. O uso da interface JMS funciona melhor para aplicativos que usam a função de mensagens genéricas, onde as configurações podem ser administradas centralmente. Isso inclui muitos aplicativos tradicionais de clientes. O cliente LLM JMS não funciona tão bem quando o aplicativo depende de funções específicas do LLM ou que requerem interação significativa do aplicativo com o LLM. Embora exista alguma latência adicionada usando a interface JMS, ela ainda fornece uma latência muito baixa e mensagens de alto rendimento.

O cliente LLM JMS suporta a maioria da função do cliente LLM, mas não suporta a função do servidor de executar dentro de uma camada ou ser um transmissor de balanço de carga.

A LLM é baseada em fazer o produtor direto para as mensagens do consumidor. O JMS é normalmente implementado usando um servidor de mensagens e uma função JMS que requer que o servidor de mensagens não esteja disponível ao usar o cliente LLM JMS. Isso inclui todas as mensagens ponto a ponto (filas) e a função de recuperação. O cliente LLM JMS foi projetado para ser executado em um ambiente JSE e não suporta extensões de servidor de aplicativos ou transações XA.

Como o cliente LLM JMS implementa JMS

O cliente LLM JMS implementa cada um dos objetos JMS fundamentais com uma classe de implementação que não é exposta externamente. As subclasses desses objetos são implementadas usando a mesma classe de implementação. Isso significa que existem apenas dois objetos administrados, ConnectionFactory e Destination. Um LLM definido ConnectionFactory pode ser fundido para o TopicConnectionFactory e o QueuEConnectionFactory, e um destino definido por LLM pode ser lançado para tópico e fila. O mesmo vale para conexão, sessão, MessageProducer e MessageConsumer. O objeto de destino de um provedor deve ser usado com uma conexão pelo mesmo provedor. No entanto, é possível enviar uma mensagem produzida por um provedor JMS para outro provedor JMS. Enviar uma mensagem criada por outro provedor JMS não é tão eficiente quanto o envio de uma mensagem criada pelo cliente LLM JMS, mas essa função é fornecida para facilitar a redução de um aplicativo de um provedor para outro.

O cliente LLM JMS não implementa o modelo de mensagens Point a Point (filas), mas todos os objetos JMS podem ser criados.

O cliente LLM JMS requer uma JVM de pelo menos Java 5.

O cliente LLM JMS define todos os seis objetos do tipo de mensagem (mensagem, bytesMessage, MapMessage, ObjectMessage, StreamMessage e TextMessage). Ao enviar uma mensagem do JMS para o JMS, o cabeçalho JMS indica o tipo de mensagem. Se o cabeçalho JMS estiver ausente (o que é comum ao enviar uma mensagem de um produtor não JMS), o cliente LLM JMS tenta deduzir o tipo da mensagem do conteúdo. Normalmente, a mensagem aparecerá como um bytesmessage, mas se a mensagem começar com um BOM UTF-8 ou parecer XML, ela será interpretada como uma magia text. Presume-se que as textmesges sejam codificadas no UTF-8 ......

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