Histórico da Página
Esta é uma POC com um cenário parcial do modelo final.
Configuração atual para canal de entrada com Spring Cloud Stream
Configuração da aplicação spring
...
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
@EnableBinding(Channel.class) public class Subscriber { @StreamListener(target = Channel.INPUT, condition = Mensagem.CONDITIONAL_EXPRESSION) public void methodName(TOTVSMessage<Mensagem> message) { } } |
Abaixo, exemplos concretos de um canal de entrada que correspondem as estruturas de código acima mencionadas:
Exemplo concreto da configuração, neste caso não há configuração para concurrency pois utiliza-se o valor padrão 1, também não é especificado a configuração referente a exchangeType pois o valor é topic (valor padrão).
...
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
@AllArgsConstructor @EnableBinding(COLENTChannel.class) public class ArquivoSubscriber { private final ArquivoApplicationService service; private final VerificarTenantValidoService verificarTenantValidoService; private final ArquivoRejeitadoApplicationService serviceRejeitada; @StreamListener(target = COLENTChannel.INPUT_NAME, condition = UploadArquivoCmd.CONDITIONAL_EXPRESSION) public void uploadArquivo(TOTVSMessage<UploadArquivoCmd> cmd) { if (verificarTenantValidoService.tenantValido(cmd)) { try { var cmd = ArquivoCmdAssembler.toCommand(message.getContent()); service.handle(cmd);O canal de saída também podeO canal de saída também pode } catch (Exception exception) { serviceRejeitada.handle(ArquivoCmdAssembler.toCommand(cmd, exception)); } } } } |
Configuração atual de canal de saída com Spring Cloud Stream
Configuração da aplicação spring
...
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
@AllArgsConstructor @EnableBinding(Channel.class) public class Publisher { private Channel channel; private TransactionContext transactionContext; public <T> void publish(T message) { var messageName = event.getClass().getSimpleName(); var message = new TOTVSMessage<T>( messageName, transactionContext.getTransactionInfo()); message.setContent(message); message.sendTo(channel.output()); } } |
Abaixo, exemplos concretos de um canal de saída que correspondem as estruturas de código acima mencionadas:
Exemplo concreto da configuração, neste caso não há configuração para exchangeType pois o valor é topic (valor padrão).
...
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
@AllArgsConstructor @EnableBinding(COLENTChannel.class) public class Publisher { private COLENTPublisher channel; private TransactionContext transactionContext; public <T> void publish(T message) { var messageName = event.getClass().getSimpleName(); var message = new TOTVSMessage<T>(messageName, transactionContext.getTransactionInfo()); message.setContent(message); message.sendTo(channel.output()); } } |
Migrando o canal de entrada para SpringAMQP com formato de configuração customizado com TJF.
Configuração da aplicação spring
...
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
@AllArgsConstructor @Component @RabbitListener(queues = QUEUE) public class Subscriber { private static final QUEUE = "nomeFila" @RabbitHandler public void methodName(@Payload final Mensagem msg) { } } |
Abaixo, exemplos concretos de um canal de entrada que correspondem as estruturas de código acima mencionadas:
Exemplo concreto da configuração quando o tipo da exchange é topic.
...
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
@AllArgsConstructor @RabbitListener(queues = QUEUE) public class ArquivoSubscriber { private static final String QUEUE = "coleta-entrega-exchange.${spring.application.name}" private final ArquivoApplicationService service; private final VerificarTenantValidoService verificarTenantValidoService; private final ArquivoRejeitadoApplicationService serviceRejeitada; @RabbitListener public void uploadArquivo(@Payload UploadArquivoCmd cmd) { if (verificarTenantValidoService.tenantValido(cmd)) { try { var cmd = ArquivoCmdAssembler.toCommand(message.getContent()); service.handle(cmd); } catch (Exception exception) { serviceRejeitada.handle(ArquivoCmdAssembler.toCommand(message, exception)); } } } } |
Migrando o canal de saída para SpringAMQP com formato de configuração customizado com TJF.
Configuração da aplicação spring
...
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
@AllArgsConstructor @Component public class Publisher { private static final String EXCHANGE = "nomeExchange" private TransactionContext transactionContext; private RabbitTemplate rabbitTemplate; public <T> void publish(T message) { var messageName = event.getClass().getSimpleName(); message = TOTVSMessageBuilder.<T> .withDefaultType() .setContent(message) .setTransactionInfo(transactionInfo) .buildAmqp(); rabbitTemplate.convertAndSend(EXCHANGE, null, message , null); } |
Abaixo, exemplos concretos de um canal de saída que correspondem as estruturas de código acima mencionadas:
Exemplo concreto da configuração quando o tipo da exchange é topic.
...
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas