Ждите kafkaTemplate в ожидании будущего - PullRequest
0 голосов
/ 27 апреля 2020

Я выполняю асинхронную операцию, которая возвращает будущий объект в al oop (скажем, 10 сообщений). Как я понимаю, метод обратного вызова автоматически запускается и выполняется, когда Future завершает свою задачу.

Предположим, мое седьмое будущее находится на стадии ожидания. Как я могу завершить это будущее исключительно?

И что такое лучший способ справиться с этим сценарием.

List<ListenableFuture<SendResult<String, String>>> cf = new ArrayList<ListenableFuture<SendResult<String, String>>>();

future = kafkaTemplate.send(topicName, message);
cf.add(future);

i++;

future.addCallback(new ListenableFutureCallback<SendResult<String, String>>() {

    @Override
    public void onSuccess(SendResult<String, String> result) {
        syso("sent success");
    }

    @Override
    public void onFailure(Throwable ex) {
        System.out.println(" sending failed");
    }
});

1 Ответ

0 голосов
/ 28 апреля 2020

Почему вы хотите это сделать?

Если есть исключение, kafka-клиенты будут вызывать обратный вызов шаблона с исключением, и шаблон завершит будущее исключительно.

Если вам действительно нужно сделать это по какой-то причине ( но я хотел бы понять почему) вы можете привести его к SettableListenerFuture.

...