0

Before raising question, I went through many links like: Spring WebFlux (Flux): how to publish dynamically, but unable to solve it yet.

I've a below code, but The type EmitterProcessor<Message<?>> is deprecated, how can I convert this code to Sinks.many().multicast().onBackpressureBuffer()?

config.java

@Configuration
public class DynamicDestinationConfig {
    
    @Bean
    public EmitterProcessor<Message<?>> emitterProcessor(){
        return EmitterProcessor.create();
    }
    
    @Bean
    public Supplier<Flux<Message<?>>> supplier() {
        return () -> emitterProcessor();
    }
}

Controller.java

@RestController
public class DynamicDestinationController {
    
    @Autowired
    private EmitterProcessor<Message<?>> emitterProcessor;
    
    @Autowired
    private ObjectMapper jsonMapper;

    @SuppressWarnings("unchecked")
    @PostMapping("/")
    @ResponseStatus(HttpStatus.ACCEPTED)
    public void handleRequest(@RequestBody String body, @RequestHeader(HttpHeaders.CONTENT_TYPE) Object contentType) throws Exception {
        Map<String, String> payload = jsonMapper.readValue(body, Map.class);
        
        String destinationName = payload.get("id");
        
        Message<?> message = MessageBuilder.withPayload(payload)
                .setHeader("spring.cloud.stream.sendto.destination", destinationName)
                .build();
        
        emitterProcessor.onNext(message);
    }
}
M. Deinum
  • 115,695
  • 22
  • 220
  • 224
Jeff Cook
  • 7,956
  • 36
  • 115
  • 186

0 Answers0