Páginas filhas
  • Consumo de Licença por demanda no REST do Protheus

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

O consumo de licença por demanda é uma solução no Protheus para permitir o serviço REST consumir licenças somente quando uma API está em execução, ao invés de manter permanente o consumo de uma licença para cada Working Thread em funcionamento no REST.

...

tabsPasso 01, Passo 02, Passo 03, Passo 04
idspasso1,passo2

...

defaultyes
referenciapasso1

...

defaultno
referenciapasso2

...

deve ser habilitado na seção da URI no arquivo de configuração do AppServer, o nome da chave é “Stateless” e deve conter o valor “1” para habilitar o comportamento de consumo de licença por demanda. 

Caso a chave não exista ou contenha o valor zero, o consumo de licença no inicio da thread será mantido. Como a configuração é por URI, é possível ter em uma mesma porta URIs diferentes, cada uma trabalhando com um modelo de licenciamento.

Exemplo:

[URIHTML]
URL=/rest/app
PrepareIn=All
Instances=2,2
CORSEnable=1
AllowOrigin=*
Stateless=1


04. FUNCIONAMENTO

As workings threads do pool da URI são inicializadas sem consumir nenhuma licença. Quando uma requisição de API é iniciada a Working Thread faz uma solicitação de licença para o License Server, caso a licença seja obtida a API é executada normalmente, caso não exista licença disponível é devolvido o erro 503.

O REST permanece consumindo licença TOTVS I, exceto se a requisição tiver origem do API Manager da TOTVS e enviar na requisição o código da licença do aplicativo.

Mais informações sobre isso no tópico 8 dessa documentação.


05. ERROS

O Erro 503 é devolvido na requisição da API caso não exista Licença disponível. Existem diversos motivos para uma licença não estar disponível, tais como:

  • Todas as licenças estão em uso
  • O License Server não possui nenhuma licença para o módulo/aplicativo solicitado
  • O License Server não está configurado


06. CHAVES DE LOG

Caso o licenciamento apresente problemas, ative as chaves de log para análise do problema e envie o console para a equipe de suporte.

  • Análise de troca de mensagens com o License Server:

A chave FWFRAME_TRACELS configurada com o valor 1 na seção do ambiente mostra no console as mensagens trocadas com o License. Deve ser ativada somente quando é necessário analisar detalhadamente o consumo de licenças. 

  • Análise de performance:

A chave FWFRAME_TIMELS configurada com o valor 1 na seção do ambiente mostra no console o tempo em milisegundos gasto no consumo e na liberação de licença. Ela deve ser ativada somente caso haja necessidade de analisar lentidão na troca de mensagens com o License Server.

A ativação das chaves acima implica em perda de performance, pois haverá o tempo de I/O para escrita no console, por esse motivo devem ser ativadas somente caso haja necessidade de análise de problemas.


07. PERFORMANCE

A utilização do modelo de licenciamento por demanda no REST adiciona de 50 a 80 milisegundos no tempo de cada requisição de API, referente ao tempo de comunicação com o License Server.

Nos testes executados em laboratório foi percebido uma perda de 20% de performance em relação a quantidade de requisições atendidas por segundo.


08. CONSUMO DE LICENÇAS DE APLICATIVO

O consumo de licença por demanda permite o uso de uma licença diferente da TOTVS I quando a requisição da API tem como origem o API Manager da TOTVS (WSO2 ou Mingle).

Para utilizar uma licença de aplicativo durante a requisição é necessário:

  • O dono do aplicativo deve solicitar a criação de um código de aplicativo no Santo Graal
  • O cliente contratar licenças de aplicativo e distribuir no License Server
  • O API Manager da TOTVS (WSO2 ou Mingle) deve enviar no header da requisição o código do aplicativo na chave x-totvs-appcode
  • O cliente deve utilizar um API Manager da TOTVS (WSO2 ou Mingle) para gerenciar as requisições de API no REST

Veja aqui a documentação do Mingle.


Caso o aplicativo esteja no ambiente de homologacao ou desenvolvimento do Mingle, é necessario adicionar na seção do ambiente do Protheus uma chave para configurar o  Mingle.

MINGLE=DEV (Para desenvolvimento)

MINGLE=HOM (Para homologação)

09. EXEMPLO DE CONFIGURAÇÃO DO REST


Bloco de código
[ENVIRONMENT]
DBALIAS=DOCKER
DBDATABASE=POSTGRES
DBPORT=7801
DBSERVER=dbaccess
ROOTPATH=/app-data/
RPODB=top
RPOLANGUAGE=portuguese
RPOVERSION=120
SOURCEPATH=/app-data/apo
STARTPATH=/system/
FWFRAME_TIMELS=1
FWFRAME_TRACELS=1

[HTTPJOB]
ENVIRONMENT=ENVIRONMENT
MAIN=HTTP_START

[HTTPREST]
Port=8082
SECURITY=1
URIs=HTTPURI,APP

[HTTPV11]
Enable=1
Sockets=HTTPREST

[HTTPURI]
AllowOrigin=*
CORSEnable=1
Instances=1,1,1,1
OnConnect=REST_CONNECT
OnExit=REST_EXIT
OnStart=REST_START
PrepareIn=T1
Stateless=0
URL=/v1/

[APP]
AllowOrigin=*
CORSEnable=1
Instances=1,1,1,1
OnConnect=REST_CONNECT
OnExit=REST_EXIT
OnStart=REST_START
PrepareIn=T1
Stateless=1
URL=/app/

...




Templatedocumentos


HTML
<style>
div.theme-default .ia-splitter #main {
    margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
    display: none;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    overflow-x: hidden;
}

.aui-header-primary .aui-nav,  .aui-page-panel {
    margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
    margin-left: 0px !important;
}

.aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after { 
	background: #FF9900; !important 
}

.menu-item.active-tab { 
	border-bottom: none !important; 
}

</style>