1

У меня есть сложное веб-приложение на Java. Он содержит:управлять запланированными заданиями с помощью java

  1. различных библиотечных модулей, которая хранит и управляет с помощью Maven
  2. веб-модуль, который масштабируется для многих серверов в облаке
  3. базы данных: SQL + NoSQL
  4. много различных регламентных заданий для работы с базой данных ,

Мне нужно сообщить, как разработать и управлять запланированными заданиями. Мои требования:

  1. Работы следует отделять от веб-модуля, потому что веб-уровень автоматически масштабируется на азазонах ec2 insanses.
  2. Некоторые из заданий очень важны для работы с деньгами, поэтому мне нужны действительно хорошие инструменты для мониторинга результатов работы, состояний заданий, журналов и т. Д. Мне нужна возможность делать очень быстрые исправления и возможность останавливать \ start \ cancel (если он зависает по какой-либо причине) конкретные задания отдельно в режиме реального времени.
  3. Мне нужно использовать непрерывную доставку (CD), когда все работает правильно. Это означает, что задания строятся на сервере CI и автоматически развертываются для тестирования \ производственного сервера. Конфигурация запланированного времени также должна находиться под контролем версий.

Я посмотрел на некоторые решения:

  1. рабочих мест серверов как obsidian. Не думайте, что это хорошая идея использовать такое монстра, как это.
  2. quartz. Я не могу найти простой способ объединить требования № 2 и 3. С кварцем я могу управлять своими работами в режиме реального времени или создавать хорошую сборку компакт-дисков для работы. Не вместе. Может быть, я что-то упустил?
  3. Разверните баннеры заданий на целевом сервере со всеми библиотеками и запустите скрипты Запустите эти скрипты из cron. Это решение выглядит уродливым. Во-первых, мне нужно развернуть для тестирования \ производственного сервера все мои библиотеки с сервера CI для каждого развертывания для обеспечения чистоты процесса CI. Во-вторых, я действительно думаю, что это хорошая идея. Я действительно думаю, что я что-то пропустил, и есть хорошее решение для этой обычной проблемы.

Можете ли вы дать мне совет? Как разработчики обычно управляют запланированными заданиями с процессом CD?

+0

Пожалуйста, укажите сервер приложений или веб-контейнер, в котором вы используете – Acewin

+0

Я советую вам tloslite, который может ответить на первые два из ваших вопросов. – serkan

ответ

1

Я рассматриваю, что вы должны использовать какой-либо сервер приложений, такой как JBoss или WebLogic.

Я хотел бы предложить написать Service MBean, который будет загружать запланированные задания с использованием кварцевых

Преимущества использования Service MBean, вы можете выставить действия. Вызывая эти действия, вы должны быть в состоянии остановить запуск задания.

Преимущество QuartZ - это очень надёжно. Вы сможете управлять отдельными работами.

Поймать здесь будет только один экземпляр планировщика (объекта) под вашим сервисом MBean. Поэтому, если вы остановите планировщик, вы остановите все задания.

Вы можете создать отдельную категорию регистратора для работы с работой Кварц

Просьба предоставить некоторые дополнительные материалы, как которые сервер приложений, которые вы используете. Различные серверы приложений имеют различные функции, которые могут быть полезны. Хотя вы должны быть в состоянии реализовать все свои идеи в любой из них

У меня есть подобное приложение, работающее на JBoss AS7, каждая работа является нитью по своей собственной В выполнения логики Иова, я

Thread.currentThread().setName(UNIQUE_NAME_TIMESTAMP); 

таким образом я могу отметить выполнение конкретного задания за цикл.

кварц. Я не могу найти простой способ объединить требования № 2 и 3. С кварцем я могу управлять своими работами в режиме реального времени или создавать хорошую сборку компакт-дисков для работы. Не вместе. Может быть, я что-то пропустил?

Вам действительно нужен сервер приложений, такой как JBoss. который может предоставить вам стабильный веб-контейнер, полностью сертифицирован по Java EE, упрощает интеграцию с API.

---- == ---- == --- == ---- == --- == ---- == --- == ---- = = --- == ---- == --- == ---- == ----

Надеюсь, вы знаете, как писать SAR. Если не все еще, это очень легко. Мне нравится JBoss, поскольку его концепция проста, проста в использовании и очень сильная Application Server.

Вы можете проверить этот конкретный учебник блог, чтобы понять, как написать сервис MBean http://middlewaremagic.com/jboss/?p=366

Давайте поговорим о MyServerMonitorMBean

package custom.mbean; 
public interface MyServerMonitorMBean 
{ 
    public void setFrequency(String frequency); 
    public String getFrequency(); 
} 

, как вы заметили, есть метод деклараций, которые необходимо реализовать реализация MBean.

В архитектуре Java EE это означает, что вы фактически подвергаете действия. Действия, которые можно вызвать извне, чтобы вызвать некоторые команды. Теперь эта концепция имеет только те методы, которые были объявлены в интерфейсе MBean.

Затем вы можете подключиться к JBoss JMXconsole через jconsole. Вы можете проверить, что здесь

https://community.jboss.org/wiki/UsingJconsoleToConnectToJMXOnAS7

---- == ---- == --- == ---- == --- == ---- == --- == ---- == --- == ---- == --- == ---- == ----

--1 - Это откроет соединение, которое позволит вам просматривать запущенные MBeans по серверу (это будет вкладка MBean на JConsole после подключения)

- 2-- ваш mbean будет service.server.монитор (название взято из предыдущего примера)

--3-- вы найдете действия отображаются как операции

--4-- если вы объявили методы, чтобы иметь какие-то аргументы, которые вы будете видеть, что есть индивидуальный держатель значения для тех аргументов методы, которые можно передать в службу

--5-- в моем коде я разоблачил JobStart и jobStop в два действий

@Override 
public void jobStart() { 
    this.loadJob(SchedHourlyJob.class, "hourlyjob", "grouphourly", START_INTERVAL, EXECUTION_INTERVAL); 
} 

@Override 
public void jobStop() { 
    logger.info("-- jobStop. Stopping Scheduled Job"); 

    try { 
     scheduler.deleteJob(new JobKey("hourlyjob", "grouphourly")); 
    } catch (SchedulerException schedEx) { 
     logger.error("Failed to stop scheduled job. Exception message and stacktrace ==> " ,schedEx); 
    } 
} 

--6-- Выполните аналогичные действия, чтобы начать остановку или изменить индивидуальное задание или полный планировщик.

- 7-- Вы также сможете приостановить работу, вызвав некоторые изменения и запустив ее обратно. Все эти манипуляции делают Кварц таким приятным API для планирования работы

--8-- В JBoss возможно быстрое развертывание. Вы можете иметь приложение в нескольких sar, которые будут совместно использовать общие библиотеки. Вы можете протестировать эти функции JBoss. Я понимаю, что горячее развертывание - это то, на что вы будете сосредоточены.

Надеюсь, со всем этим я объяснил логику довольно хорошо. Также это один из способов справиться с этим, вы можете придумать что-то свое.

Помните, что реализация - это ваш способ справиться с этим требованием.

И только теперь я подумал, что создание имени класса, имени задания может стать очень общим способом остановки или приостановки заданий из общего класса (Service MBean). Как я сказал ранее, все идеи должны быть проверены. Поэтому я рассматриваю вопрос о том, получится ли это, вы могли бы найти хорошее решение.

И еще раз подумав, вы даже можете реализовать вызов действий JMS, написать класс модели, сформировать его объект и отправить это на ваш сервер. Но опять же вы всегда можете создать способ остановить свою работу.

+0

Спасибо за ваш ответ @Acewin. Как я уже сказал, мой модуль работы отделен от сети, поэтому я могу использовать любой сервер приложений для его размещения. В этот момент я использую кварц с tomcat. На моих некоторых моих проектах я использовал glassfish 3 с ejb 3.1, и мне не понравился механизм запланированных работ. Так что кварц - лучший выбор - хорошо, я получил это. Можете ли вы дать мне несколько советов? 1. Как вы храните информацию о времени запуска? 2. Предположим, что одно из заданий (которое срабатывает каждую минуту) работает некорректно. Вам нужно немедленно остановиться и выключиться. Тогда вам нужно сделать быстрое исправление. Как ты это делаешь ? – vasiliyz

+0

никогда не делал ничего подобного. Но, как я уже писал, это ServiceMBean дает очень хороший вариант. Мне нравится держаться подальше от EJB. Я отредактирую свой пост, чтобы дать вам лучшее понимание. – Acewin

Смежные вопросы