Histórico da Página
...
- Criar um projeto (classLibrary .NET) na solution do segmento em questão, com o seguinte padrão de nome: RM.[Segmento].XXX.SmartLink.Service.
- Exemplo: RM.Glb.SGDP.SmartLink.Service.dll
- Adicionar referência para a dll "RM.Lib.SmartLink.dll";
Criar uma classe que receba em seu construtor instâncias das seguintes interfaces:
"IRMSSmartLinkPublisherService": interface de serviço responsável em incluir a mensagem na fila do RM.SmartLink.Client.
Informações Foi criada na Lib uma classe de "Factory" responsável em fornecer uma instância para interface "IRMSSmartLinkPublisherService". Trata-se da classe "RMSSmartLinkPublisherFactory". Basta chamar seu método público "NewSmartLinkPublisher" para obter uma instância contendo essa responsabilidade.
"IRMSLogger": serviço usado para incluir logs relacionados à regra de negócio em questão.
Informações Todos os logs adicionados nesse serviço serão gravados automaticamente na tabela "GTotvsLinkLog"
Para publicar uma mensagem na fila do RM.SmartLink.Client, basta chamar o método "AddMessage" da instância de interface "IRMSSmartLinkPublisherService". Os seguinte dados devem ser enviados através de uma classe de parâmetros do tipo "SmartLinkPublisherAddMessageParams":
Propriedade Descrição Command Nome do comando a ser incluído na fila do SmartLink. Ex: SGDPUpdateTenantMetada CorrelatedId Pode ser ser enviado nessa propriedade um identificador (guid) que correlacionam mensagens de envio e resposta. Data Dados da mensagem contendo informações relacionadas ao negócio. Pode ser em qualquer formato (json, xml, etc) desde que o consumidor consiga interpretá-lo.
RouterMessage Rota de envio da mensagem. Será concatenada ao endpoint do serviço do Totvs SmartLink.Server. ex: /api/v1/link/send/SGDPMaskResponse/SGDP
- Diagrama de classes contendo um publicador de mensagem de exemplo:
...
- Criar um projeto (classLibrary .NET) na solution do segmento em questão, com o seguinte padrão de nome: RM.[Segmento].XXX.SmartLink.Service.
- Exemplo: RM.Glb.SGDP.SmartLink.Service.dll
- Adicionar referência para a dll "RM.Lib.SmartLink.dll";
Criar uma classe herdando da ancestral "RMSSmartLinkConsumerMessageBase".
- A classe "RMSSmartLinkConsumerMessageBase" herda da classe RMSObject da Lib. Consequentemente, as classes de "consumers" poderão chamar os métodos "CreateFacade" e "CreateModule" dentro de suas estruturas.
Carimbar a classe com o atributo "RMSSmartLinkConsumerMessageAttr". Nesse atributo, devem ser informados os dados abaixo:
Propriedade Descrição Cod.Sistema Identificador da aplicação Comando Nome do Comando da mensagem Código fonte de exemplo (extraído da classe "GlbSGDPConsumerDataCommandMessage" localizada na solution de Globais, projeto "RM.Glb.SGDP.SmartLink.Service":
Bloco de código language c# firstline 1 linenumbers true using RM.Glb.SGDP.SmartLink.Service.Domain.Interfaces; using RM.Lib; using RM.Lib.SmartLink.Domain; using RM.Lib.SmartLink.Domain.Consumer; using RM.Lib.SmartLink.Domain.Interfaces; using RM.Lib.SmartLink.Domain.Publisher; using System; using System.Runtime.Serialization; namespace RM.Glb.SGDP.SmartLink.Service.Domain { /// <summary> /// Regras de implementação do mecanismo de processamento da mensagem SGDDataCommand do SGDP /// </summary> [RMSSmartLinkConsumerMessageAttr(CodSistema.Glb, "SGDPDataCommand")] public class GlbSGDPConsumerDataCommandMessage : RMSSmartLinkConsumerMessageBase { protected override ConsumerMessageExecuteResult DoExecute(string message) { logService.NotifyLogInfo(Properties.Resources.sconTotvsAppInicioExecucaoDoConsumerSGDPDataCommandConsumer); ConsumerMessageExecuteResult result = new ConsumerMessageExecuteResult(); IGlbSGDPResolverService resolver = GlbSGDPResolveFactory.NewSGDPResolve(this.DBS, this.logService); IRMSSmartLinkPublisherService smartLinkPublisherService = RMSSmartLinkPublisherFactory.NewSmartLinkPublisher(this.DBS, this.logService); IGlbSGDPPublisherMessageService publisher = new GlbSGDPPublisherMessageService(smartLinkPublisherServicethis.SmartLinkPublisherService, resolver, logService); ExecuteDataCommandParms par = new ExecuteDataCommandParms(); par.Message = message; try { var execDataResult = resolver.ExecuteSGDPDataCommand(par); logService.NotifyLogInfo(Properties.Resources.sconTotvsAppJSonSGDPDataResponseCommandForamGerados, Properties.Resources.sconTotvsAppQuantidadeDeJSonsGerados, execDataResult?.JsonResults?.Count); result.CorrelatedID = execDataResult.RequestId; if (execDataResult?.JsonResults != null) { foreach (var jsonResult in execDataResult.JsonResults) { AddResponseDataCommandParms parResponse = new AddResponseDataCommandParms(); parResponse.Message = jsonResult; parResponse.CorrelatedId = execDataResult.RequestId; publisher.AddResponseDataCommand(parResponse); } } } catch(Exception ex) { logService.NotifyLogError(new GlbSGDPConsumerDataCommandMessageException( Properties.Resources.sconTotvsAppErroAoProcessarSGDDataCommand, ex)); } logService.NotifyLogInfo(Properties.Resources.sconTotvsAppFimExecucaoDoConsumerSGDPDataCommandConsumer); return result; } } [Serializable] public class GlbSGDPConsumerDataCommandMessageException : RMSApplicationException { public GlbSGDPConsumerDataCommandMessageException() : base() { } public GlbSGDPConsumerDataCommandMessageException(string message) : base(message) { } public GlbSGDPConsumerDataCommandMessageException(string message, Exception ex) : base(message, ex, string.Empty) { } public GlbSGDPConsumerDataCommandMessageException(SerializationInfo info, StreamingContext context) : base(info, context) { } } }
...