Пробовал подключиться к удаленному кластеру kafka с моей локальной машины.
У VM было 1 внутреннее (9.0.0.1 и внешнее ip (192.1.1.1), я мог бы ssh только внутреннему & amp; не внешнему, изменения в моем файле conifg / server.properties
// предоставить ip в машине, когда u делает ifconfig или hostname -I
listeners=PLAINTEXT://192.1.1.1:9092
// дает ip-потребителю и производителю connect
advertised.listeners=PLAINTEXT://9.0.0.1:9092
Стандартная консольная Java просто не может этого сделать. Все вводимые символы буферизуются до тех пор, пока вы не нажмете Enter, и в этот момент все они доступны на System.in.
Итак, если вы зациклите свой код «нажмите любую клавишу», скажем, 5 раз, и я наберу предложение «привет!», Ваш код все еще застревает на первом, ожидая нажатия клавиши. Если я затем нажму Enter, все 5 циклов завершатся немедленно, и если вы вызовете waitForKey позже, он мгновенно вернется еще 2–3 раза (один раз для восклицательного знака и один раз для новой строки ... дважды, если в Windows потому что их переводы строки 2 символа).
TL; DR: Вы не можете использовать System.in.read()
для этого. На всех.
Одно из решений состоит в том, чтобы попросить пользователя не нажимать клавишу «любая», а нажать клавишу «ввод», а затем использовать, например, вызов сканера next()
после установки разделителя на новую строку или написать код, который продолжает вызывать System.in.read()
, пока не вернет '\ n':
private void pressEnterToContinue() {
while (true) {
int c;
try {
c = System.in.read();
} catch (IOException e) {
throw new RuntimeException(e);
}
if (c == -1 || c == '\n') return;
}
}