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);
}
}