import.css=/download/attachments/6062824/tecnologia.css |
Cria um Serviço de compartilhamento de Dados em cache de memória permitindo que os dados sejam armazenados em estrutura de Fila de mensagens.
Este serviço pode ser usado para compartilhar dados entre servidores, permitindo troca de informações entre eles e e com isto permitindo também a continuação de tarefas iniciadas em um servidor e finalizadas em outro.
Cria uma infra estrutura que permite uma "granularização" das tarefas que podem ser executadas por quaisquer servidores.
A Fila pode ser criada pode ser criada para Windows e Linux usando o serviço do Redis como infra-estrutura (Serviço de Cache), ou ser criada em Linux usando a SQS ambientes da Amazon (AWS) (https://aws.amazon.com/pt/sqs/).
#include 'protheus.ch' // Setup Redis Static cRedisHost := "tec-clima" Static nRedisPort := 6379 User Function FilPut() Local nRet := 0 // ID da mensagem Local cMsgId1 := "" // Mensagem a enviar Local cMsg := '{"inteiro":100,"double":10.32,"OK":true,"NOK":false,"NULO":null,"VAZIO":"","ROWS":[{"Valor":5000,"OBJ":{"x":2},"Data":"2014-08-29"}, "ricardo"], "VETOR":[1,2,3,4]}' // Nome da Fila Local cQueueName := "Fila_TQLS" // Objeto de Fila Local oTQLS := Nil Local nNO_MSGS := 0 Local cMsgGet := "" // Cria um novo objeto de Fila oTQLS := TQueueSvc():New(cQueueName) If(oTQLS == Nil) ConOut("### ERRO ### " + "Erro na criacao da Fila - " + cQueueName) Return .F. Else ConOut("Criacao da Fila OK - " + oTQLS:cName) EndIf // Configurando a Fila nRet := oTQLS:Setup(cRedisHost, nRedisPort) If nRet != 0 ConOut("### ERRO ### " + "Erro ao fazer o Setup" + " Erro: " + AllTrim(Str(nRet))) Return .F. Else ConOut("Setup de Fila OK - " + oTQLS:cName + " nMsgRetPer: " + AllTrim(Str(oTQLS:nMsgRetPer)) + " nVisTimeOut: " + AllTrim(Str(oTQLS:nVisTimeOut))) EndIf // Gravando uma mensagem nRet := oTQLS:PutMsg( @cMsgId1, cMsg ) If nRet != 0 ConOut("### ERRO ### " + "Erro ao enviar mensagem" + " Erro: " + AllTrim(Str(nRet))) Return .F. Else ConOut("Enviou msg Fila OK - " + oTQLS:cName + " com ID: " + cMsgId1 + " Tamanho: " + AllTrim(Str(Len(cMsg)))) EndIf // Obtendo valor de indicacao de que nao tem mais mensagens nNO_MSGS := oTQLS:eNO_MSGS // Obtem a mensagem nRet := oTQLS:WaitMsg( @cMsgId1, @cMsgGet, , 3 ) If nRet != 0 If(nRet == nNO_MSGS) ConOut("OK, nao existem mensagens na Fila.") Else ConOut("### ERRO ### " + "Erro ao receber mensagem" + " Erro: " + AllTrim(Str(nRet))) Return .F. EndIf Else ConOut("Recebeu msg Fila OK - " + oTQLS:cName + " com ID: " + cMsgId1 + " Tamanho: " + AllTrim(Str(Len(cMsgGet)))) EndIf // Removendo a mensagem nRet := oTQLS:DelMsg( cMsgId1 ) If nRet != 0 ConOut("### ERRO ### " + "Erro ao remover mensagem" + " Erro: " + AllTrim(Str(nRet))) Return .F. Else ConOut("Removeu msg Fila OK - " + oTQLS:cName + " com ID: " + cMsgId1) EndIf Return .T. |
Para Windows a versão requer uma biblioteca para acesso ao Redis (rdwincli.dll), e para Linux acessando o SQS da AWS em versões superior "7.00.131227A-20180417 NG" requer a biblioteca (libaws-totvs-interface.so).
Arquivos: rdwincli_32bits.zip | rdwincli_64bits.zip | libaws-totvs-interface_32bits.zip | libaws-totvs-interface_64bits.zip
Totvs Application Server com release superior a 7.00.131227A-20160120 NG