@Scheduled(fixedDelay = 3000, initialDelay = 1500)
    public void sendAsynchronouslyWithCallback() {
        CarDto carDto = CarDto.builder()
                .id(UUID.randomUUID())
                .color("black")
                .name("bmw")
                .build();
        RabbitConverterFuture<RegistrationDto> rabbitConverterFuture =
                asyncRabbitTemplate.convertSendAndReceiveAsType(
                        directExchange.getName(),
                        ROUTING_KEY,
                        carDto,
                        new ParameterizedTypeReference<>() {});
        rabbitConverterFuture.addCallback(new ListenableFutureCallback<>() {
            @Override
            public void onFailure(Throwable ex) {
                LOGGER.error("Cannot get response for: {}", carDto.getId(), ex);
            }

            @Override
            public void onSuccess(RegistrationDto registrationDto) {
                LOGGER.info("Registration received {}", registrationDto);
            }
        });
    }
@Test
    void sendAsynchronouslyWithCallback() {
        // given

        // when
        ThrowableAssert.ThrowingCallable send = () -> statefulCallbackClient.sendAsynchronouslyWithCallback();

        // then
        assertThatCode(send).doesNotThrowAnyException();
    }