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/).
Hierarquia
TQueueListSvc
Construtores
Propriedades
Métodos
Exemplos
Exemplo 1Expandir origem
#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.
Observações
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).