Как реализовать очередь HTTP-запросов в Java

мы пытаемся настроить архитектуру для приложения. Для нас это впервые. Это приложение не взаимодействует с конечными пользователями, оно предназначено для моих внутренних вычислений. У нас есть удаленный DBServer (Ms SQL Server Azure) с 1 именем базы данных как DBTesting. Всякий раз, когда какие-либо данные были изменены в DBTesting, это вызывает имя приложения Java как App1.

Вопрос 1:

Каковы возможности запуска App1 .

В App1 я запускаю .exe файл, написанный на C языке. Оценка занимает 20 минут. Если DBTesting изменяется много раз за 20 минут, он отправляет столько же запросов от DBTesting до App1. Но я не хочу обрабатывать большее количество запросов за раз. Поэтому я хочу инициировать App1 в базе очереди. Как только предыдущий Http запрос будет выполнен, только Queue будет выпускать следующий HTTP-запрос.

Вопрос 2:

Есть ли способ реализовать это с помощью Java или любых других технологий?

мы взаимодействуем с базой данных с этой ссылкой

Имя пользователя: MyUserName

Пароль: Мой пароль

мы пытаемся исправить это с 1 недели, но мы не понимаем, какой путь является хорошим.

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

Спасибо.


person Hanumath    schedule 02.08.2013    source источник
comment
@All Возможно ли это с использованием концепции Thread.   -  person Hanumath    schedule 02.08.2013
comment
В приведенном выше вопросе, если вы предоставите подробную информацию о базе данных (по крайней мере, имя сервера) и что-то еще, связанное с приложением, может быть проще ответить. Схема очень поможет.   -  person Learn More    schedule 02.08.2013
comment
@LearnMore Я обновил свой вопрос. Можете ли вы проверить его один раз?   -  person Hanumath    schedule 05.08.2013
comment
Я обновил свой ответ. Если вы можете создать очередь с помощью сервисного брокера MS-SQL и прочитать эту очередь из внешнего приложения, я думаю, это сработает для вас.   -  person Learn More    schedule 05.08.2013
comment
Мы поболтали и выяснили. Удалось ли вам это сделать??   -  person Learn More    schedule 13.08.2013
comment
Во время чата я сказал, что сообщения отправляются из DB в приложение Java (какое приложение запускает файл .EXE). Часть БД была сделана одним из коллег. Поэтому просто для тестирования я написал еще один класс Java для отправки текстовых сообщений на имя Activemq как MessageSender.java. Он работает нормально. Я попытался написать еще один класс Java для получения сообщений от Activemq. Но я получаю все сообщения одновременно. Тем не менее Я не разобрался. Для этого выкладываю следующую ссылку http://stackoverflow.com/questions/18128089/how-can-i-push-messages-from-activemq-to-java-application.проверьте.   -  person Hanumath    schedule 13.08.2013
comment
добавил ответ. Пожалуйста, проверьте.   -  person Learn More    schedule 14.08.2013


Ответы (2)


Простым способом было бы иметь таблицу в вашей БД с запросами Http и программу, выполняющую запросы, когда находит результат, делает запрос, если не спать.

пока (правда) {

//query the DB
if (have_results){
         //http request
         // remove request from the DB

 }else{
     // sleep 1s

}

}

это не код, но это должно быть легко.

Спасибо

person Felquir    schedule 02.08.2013
comment
Я хочу передать параметры с запросом Http. Эти параметры будут меняться динамически. Если вы измените конфигурацию в Application server, она также может разрешать только 1 запрос за раз. По сравнению с DB Table это очень просто. Но почему я делаю это, используя Java, если я хочу что-то изменить позже, я могу легко изменить свой код. Это похоже на проблему ремонтопригодности. Итак, я хочу реализовать на Java. Надеюсь, вы понимаете, что я здесь пытаюсь сделать. - person Hanumath; 02.08.2013
comment
Что касается вашего предложения, если я сделаю таблицу в моем DB. Как я могу узнать, выполнен ли предыдущий запрос или нет? - person Hanumath; 02.08.2013
comment
Если вы сделаете таблицу для запроса, а другую для параметров для каждого запроса, вам не нужно каждый раз ее менять. - person Felquir; 02.08.2013
comment
Если вы постоянно запрашиваете базу данных, когда программа получает запрос, просто выполните и удалите запрос. - person Felquir; 02.08.2013

Вы можете использовать Active-MQ для организации очереди. Active MQ, Hello World

Если вы используете сервисный брокер MSSQL , он уже предоставляет очереди сообщений. вам просто нужно выяснить, как правильно использовать его в вашем случае.

Это ссылка на мост между Service Broker и JMS.

  • Вам не нужно вызывать какое-либо приложение через базу данных.
  • Программа C обрабатывает каждый HttpRequest по 20 минут.

Используйте следующие шаги:

Часть 1:

Часть 2:

Эта ссылка может помочь вам косвенно.

Поскольку Azure не поддерживает Service Broker, должен быть другой способ реализации части 1.


Часть 1 (выполните следующие шаги, насколько это возможно):

  • Шаг 1. Генерируйте данные запроса (не сообщение, а просто данные) при изменении базы данных.

    I want to send modified or new data with request from DB to Java Application

    • I need to know how/where data is generated/gathered when database changes. Only this much in this step. Once this is clear, then we will forward. Please take one step at a time. -
  • Шаг 2. Создайте сообщения из сгенерированных данных.

  • Шаг 3. Прочитайте сообщения и отправьте их в очередь.

    send messages including data to Queue

    Структуры сообщений:

    Следующее сообщение указывает на Application1.

     App1?data="1,2,3,4,5,6,7,8,9,10..."
    

    Следующее сообщение указывает на Application2.

     App2?data="1,2,3,4,5,6,7,8,9,10..."
    

    If it allow to mention our own custom message,then I will create one more table in DB.This table have 2 columns.1 row points to ApplicationName and 2 row points to message Name.It is useful while forwarding time.

Часть 2 (на данный момент остается прежней):

  • p2.1 - Иметь программу Java, которая опрашивает очередь и проверяет, есть ли какие-либо сообщения.
  • п2.2 - Если сообщений нет, то некоторое время спит.
  • p2.3 - Если есть новые сообщения, он просто принимает одно.
  • p2.4 - Java-приложение импортирует файл XML и на основе контекста сообщения отправляет http-запрос в соответствующее приложение, включая данные
  • p2.5 - Сообщение передается программе C программой Java (см. Конструктор процессов ).
  • p2.6 - Дождитесь завершения процесса.
  • p2.7 - Когда процесс завершится (через 20 минут), перейдите к p2.1.

Структура Xml выглядит следующим образом.

   <Message>
     <Message-Body>
       <Message-Context>App1</Message-Context>
       <URL>`http://localhost:8080/App1`</URL>
     </Message-Body>
     <Message-Body>
        <Message-Context>App2</Message-Context>
        <URL>`http://localhost:8080/App2`</URL>
     </Message-Body>
   </Message>
person Learn More    schedule 02.08.2013
comment
вы имеете в виду, что JMS очередь отправляет запрос в App2 или App2 будет читать из очереди JMS. Я никогда не работаю над JMS. - person Hanumath; 02.08.2013
comment
Очередь JMS будет действовать только как канал связи между БД и APP2. Вы можете написать код в обоих приложениях для отправки и получения в/из очереди. Если вы еще не работали над ним, не расстраивайтесь. Это так же просто, как создать объект и передать его функции с некоторыми концепциями сериализации :). - person Learn More; 02.08.2013
comment
Если вы не мой, можете ли вы предложить мне какие-либо учебники. - person Hanumath; 02.08.2013
comment
Начните с сериализации в JAVA. Затем проверьте учебник по Apache Active MQ. Если у вас есть проблемы, просто напишите здесь. - person Learn More; 02.08.2013
comment
Кстати, как вы проверяете, изменена ли БД и как запрос достигает APP2 на данный момент? - person Learn More; 02.08.2013
comment
Используя концепцию Service Broker, я могу отправлять Http запросы из DB в любое приложение. Это означает, что вместо браузера я запускаю приложения DB. - person Hanumath; 02.08.2013
comment
Извините, что задаю этот вопрос. Мне нужно написать какой-либо Java код для создания JMS очереди, отправки сообщений в очередь.... не мой, я новичок в технологии Java. - person Hanumath; 02.08.2013
comment
Да, вам нужно. Ваш поток не ясен. Пожалуйста, обновите рассматриваемую информацию. Комментарии для этого не подходят. - person Learn More; 02.08.2013
comment
@ Все, я обновил свой вопрос с четкими деталями, можете ли вы проверить его один раз. - person Hanumath; 05.08.2013
comment
Я установил Activemq и открыл страницу консоли Activemq в браузере. После этого я не уверен, что буду делать. Я не понял, как работает JMS по вашим ссылкам. - person Hanumath; 07.08.2013
comment
Я могу вести шаг за шагом. Но я не уверен, нужен ли вам AMQ. Что вам нужно, так это создать очередь с помощью MS-SQL Service Broker и опросить очередь с помощью программы Java. - person Learn More; 07.08.2013
comment
Изначально я думал создать Queue через MS-SQL Service Broker, но MS-Sql Server Azure не поддерживается Service Broker. Поэтому думаю разделить свою работу на 2 части. 1 часть соответствует отправке сообщений на Activemq любым способом из MS-SQL Server Azure. 2 Часть соответствует отправке сообщений в имя приложения Java как App1, здесь решается, какое сообщение соответствует какому приложению. может быть, вы сомневаетесь, как App1 решить. Для этого я использую файл XML. Я думаю, что если я сделаю это позже, если я хочу добавить приложения, мне просто нужно изменить код XML. @Learn More что вы сказали о моей идее, это эффективный способ. - person Hanumath; 07.08.2013
comment
Первая задача — успешно обмениваться сообщениями между приложениями. Как только это будет достигнуто, мы будем беспокоиться о чем-то другом. Как вы собираетесь реализовать часть 1? - person Learn More; 07.08.2013
comment
На самом деле я понятия не имею, я думаю, что вторую часть легко реализовать, поэтому я думаю начать с нее. Для этого я создаю сообщения вручную в Activemq консоли. На самом деле @Learn More мой разум не работает из-за этой задачи. - person Hanumath; 07.08.2013
comment
Я начинаю добавлять шаги в свой ответ. Я поставлю комментарий. Вы редактируете и добавляете ответ. Нелегко следить за комментариями. - person Learn More; 07.08.2013
comment
@Learn More Мне нужно отредактировать ваш ответ или мой вопрос в соответствии с вашим ответом. - person Hanumath; 07.08.2013
comment
Пожалуйста, добавьте в местах, где я написал комментарий здесь. Используйте собственные шрифты. Не редактируйте то, что я написал. - person Learn More; 07.08.2013
comment
Я изменил. Извините, я добавил еще один p2.4 во второй части, чтобы вы лучше поняли, о чем я думаю. - person Hanumath; 07.08.2013
comment
@user2642355 user2642355 Пожалуйста, делайте по одному шагу за раз. На данный момент часть1›шаг1. Это ясно? - person Learn More; 07.08.2013
comment
давайте продолжим это обсуждение в чате - person Hanumath; 07.08.2013