Jump to content

dev botao

Problema ao Imprimir com Multi-Thread


Go to solution Solved by CONCEPT AUTOMACAO,
  • Este tópico foi criado há 414 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

No projeto em Java utilizo o posPrinter MT - Cdecl.

Meu projeto é uma API feita utilizando o SpringBoot. Nela há um método de Post que imprime o Consumo.

Quando há somente um Thread imprimindo não da erro, o problema começa quando há vários thread imprimindo ao mesmo tempo. 

O problema parece estar relacionada a quantidade de thread, pois ao aumentar o numero de thread o problema se torna mais frequente.

Em um teste que eu fiz utilizando o Postman, durante 1 min e 4 usuario deu 123 solitacoes e 5 erros. Fiz o teste de ping com a impressora durante 30s e não teve perda de pacote. Ao ativar o LogNivel e LogPath as consultas ficaram mais lentas.

Os arquivos e logs em anexo são referente ao ultimo teste feito, com 5 usuário em 1 minuto. Tanto da minha applicacao quanto do componente da ACBR.codigo.txt

ACBrLibPosPrinter-20230818.log logimp.log ComandaServer.log

Edited by CONCEPT AUTOMACAO
Escrevi errado
Link to comment
Share on other sites

  • Consultores
28 minutos atrás, CONCEPT AUTOMACAO disse:

No projeto em Java utilizo o posPrinter MT - Cdecl.

Meu projeto é uma API feita utilizando o SpringBoot. Nela há um método de Post que imprime o Consumo.

Quando há somente um Thread imprimindo não da erro, o problema começa quando há vários thread imprimindo ao mesmo tempo. 

O problema parece estar relacionada a quantidade de thread, pois ao aumentar o numero de thread o problema se torna mais frequente.

Em um teste que eu fiz utilizando o Postman, durante 1 min e 4 usuario deu 123 solitacoes e 5 erros. Fiz o teste de ping com a impressora durante 30s e não teve perda de pacote. Ao ativar o LogNivel e LogPath as consultas ficaram mais lentas.

Os arquivos e logs em anexo são referente ao ultimo teste feito, com 5 usuário em 1 minuto. Tanto da minha applicacao quanto do componente da ACBR.codigo.txt

ACBrLibPosPrinter-20230818.log 490.02 kB · 0 downloads logimp.log 36.87 kB · 0 downloads ComandaServer.log 33.89 kB · 0 downloads

Analisei o log, único erro que encontrei foi
18/08/23 10:24:12:680 -    SetRetorno(-10, Synapse TCP/IP Socket error 10054: Connection reset by peer)

-10 Indica que houve erro ao ativar o ACBrPosPrinter, olhando a mensagem de retorno, parece um erro de conexão..

Pesquisando no fórum, veja se nas configurações ACBrLib.ini a propriedade ControlePorta = true, veja se resolve..
https://acbr.sourceforge.io/ACBrLib/ConfiguracoesdaBiblioteca.html

  • Like 1
Link to comment
Share on other sites

  • Consultores

@antonio.carlos
Realizamos alguns testes no discord, uma das orientações sobre esta mensagem que ele está recebendo é esta que vc citou.
https://discord.com/channels/798697718800318484/800922605414383636/1142088324333453352
Foi solicitado este mesmo teste, mas ele informou que persiste o erro mesmo assim.



 

 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Link to comment
Share on other sites

  • Membros Pro
  • Solution

@antonio.carlos @Daniel InfoCotidiano
Parece que meu problema era em instanciar e chamar os métodos do componente consecutivamente ele sobrecarregava, ainda mais por estar em Thread e no mesmo momento pode ter várias comunicações simultâneas, ao coloca o sleep no Thread atual, ele parou de me apresentar esse problema.

private void imprimirPrinter(Impressora imp,String conteudo,ACBrPosPrinter posPrinter) throws Exception {
        posPrinter.imprimir(conteudo);
        try {
            Thread.currentThread().sleep(500);            
        } catch (InterruptedException ex) {
            log.error("Erro no Sleep: "+ex.getMessage(),ex);
        }
    }
    
    private void desativarPrinter(Impressora imp,ACBrPosPrinter posPrinter) {
        log.info(String.format("Desativando Printer: '%s'",imp.getNome()));
        try {
            posPrinter.desativar();
        } catch (Exception ex) {
            log.error("Erro ao desativar: " + ex.getMessage(), ex);
        } 
        
        try {
            Thread.currentThread().sleep(500);            
        } catch (InterruptedException ex) {
            log.error("Erro no Sleep: "+ex.getMessage(),ex);
        }
    }    

Minhas consultas está demorando 1s a mais porem parou o erro com a comunicação.

  • Like 4
Link to comment
Share on other sites

  • Fundadores

@CONCEPT AUTOMACAO, notei que você configurou a impressora para ser acessada por Porta TCP

   18/08/23 10:24:02:543 - LIB_ConfigGravarValor(PosPrinter, Porta, TCP:192.168.1.72:9100)

A impressora tem embutido, um Servidor TCP, mas ela não conseguirá tratar conexões simultâneas, ou fará filas ou semáforos...

O Erro reportado, vem da conexão com a Impressora... e pode indicar que uma nova conexão a ela, derrubou a conexão anterior...

   18/08/23 10:24:12:680 -    SetRetorno(-10, Synapse TCP/IP Socket error 10054: Connection reset by peer)

Você precisa ter um mecanismo de Semáforos em sua implementação, para que apenas aThread consiga,

  • Bloquear o Semáforo,
  • enviar os dados para a impressora
  • liberar o Semáforo

Com isso, as demais Threads, entrariam na fila

  • Like 5
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...