Стандартный способ непрерывного запуска Java-программы - PullRequest
0 голосов
/ 26 апреля 2018

Что является стандартным (отраслевым стандартом) способом непрерывной работы Java-программы.

Вариант использования (обработка в реальном времени):

  • Постоянно работающий производитель Kafka
  • Постоянно работающий потребитель Kafka
  • Постоянно работающий сервис для обработки потока объектов

В Stackoverflow найдено несколько вопросов, например: https://stackoverflow.com/a/29930409/2653389

Но мой вопрос относится к , что является отраслевым стандартом для достижения этого .

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Прежде всего, не существует указанного стандарта.

Возможные варианты:

  • WEB-приложение Java EE
  • WEB-приложение Spring
  • Приложение с Spring-kafka (@KafkaListener)

Производитель Kafka потенциально может принять некоторые команды.В реальном сценарии я работал с приложениями, которые непрерывно работают со слушателями, получая запросы, которые запускали некоторые задания, пакеты и т. Д.

Этого можно достичь, используя, например:

  • Веб-сервер, принимающий HTTP-запросы
  • Автономное приложение Spring с @KafkaListener

Потребителем может быть приложение Spring с @KafkaListener.

@KafkaListener(topics = "${some.topic}")
public void accept(Message message) {
   // process
}

Приложение Springс @KafkaListener будет работать бесконечно по умолчанию.Контейнеры слушателей, созданные для аннотаций @KafkaListener, регистрируются с помощью компонента инфраструктуры типа KafkaListenerEndpointRegistry.Этот бин управляет жизненным циклом контейнеров;он автоматически запустит все контейнеры, для которых autoStartup установлено в true.KafkaMessageListenerContainer использует TaskExecutor для выполнения основного цикла KafkaConsumer.

Документация для получения дополнительной информации.

Если вы решите обходиться без каких-либо платформ и серверов приложений, возможное решение - создать прослушиватель в отдельном потоке:

public class ConsumerListener implements Runnable {

    private final Consumer<String, String> consumer = new KafkaConsumer<>(properties);

    @Override
    public void run() {
        try {
            consumer.subscribe(topics);

            while (true) {
                    // consume
                }
            }
        } finally {
            consumer.close();
        }
    }
}
0 голосов
/ 26 апреля 2018

Когда вы запускаете программу наподобие "java jar", она будет работать, пока вы не остановите ее.Но это нормально для простого личного использования и тестирования вашего кода.Также в системе UNIX существует приложение под названием «экран», вы можете запускать свой java jar как демон.

Промышленный стандарт - серверы приложений.От простой Jetty до корпоративной WebSphere или Wildfly (например, JBoss).Серверы приложений позволяют непрерывно запускать приложения, взаимодействовать с внешним интерфейсом, если это необходимо, и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...