如何在Java中实现HTTP请求队列

时间:2013-08-02 06:08:53

标签: java architecture queue servlet-filters java-ee-7

我们正在尝试为应用程序设置架构。这是我们的第一次。此应用程序不与最终用户交互,这是我的内部计算目的。 我们有一个远程DBServer(Ms sql server azure),其中1个数据库名称为DBTesting。每当在DBTesting中修改任何数据时,它都会将java应用程序名称触发为App1

问题1:

触发App1的可能性有多大。

App1中,我正在运行.exe文件,该文件以C语言编写。评估需要20分钟。如果在20分钟内多次修改DBTesting,则会从DBTestingApp1发送大量请求。但我不希望一次处理更多请求。所以我想在队列基础中触发App1。完成上一次Http请求后,只有Queue会释放下一个HTTP请求。

问题2:

有没有办法使用Java或任何其他技术实现此功能

我们正在使用此Link

与数据库进行交互

UserName:MyUserName

密码:MyPassword

我们正试图在1周内解决这些问题,但我们并不知道哪条路是好方法。

任何人都可以建议我使用一些适合我的要求的教程。

感谢。

2 个答案:

答案 0 :(得分:0)

简单的方法是在数据库中有一个表,其中包含Http请求和一个运行查询的程序,当找到结果时,如果没有睡眠则发出请求。

而(真){

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

 }else{
     // sleep 1s

}

}

它不是代码,但应该很容易。

由于

答案 1 :(得分:0)

您可以使用Active-MQ进行排队。 Active MQ, Hello World

如果您使用的是MSSQL service broker,则它已提供Message Queues。你只需要弄清楚如何在你的情况下正确使用它。

这是指向Service Broker to JMS bridge的链接。

  • 您无需通过数据库调用任何应用程序。
  • C程序需要20分钟来处理每个HttpRequest。

使用以下步骤:

第1部分:

  • p1.1 - 使用MSSQL service broker设置队列。
  • p1.2 - 每次数据库更改时,都会向队列发送消息。

第2部分:

  • p2.1 - 有一个Java程序轮询队列并检查是否有任何消息。
  • p2.2 - 如果没有消息,它会睡一段时间。
  • p2.3 - 如果有新消息,则只需一封。
  • p2.4 - 消息由Java程序传递给C程序(参见Process Builder)。
  • p2.5 - 等待该过程完成。
  • p2.6 - 当过程完成时(20分钟后),转到第2.12页。

This link might help you indirectly.

由于Azure不支持服务代理,因此必须有其他方式来实现part1。


第1部分(以下方式实施以下步骤):

  • 步骤1.在数据库更改时生成请求数据(不是消息,只是数据)。

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

    • 我需要知道数据库更改时如何/在何处生成/收集数据。这一步只有这么多。一旦明确,我们就会前进。请一步一步。 -
  • 步骤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程序轮询队列并检查是否有任何消息。
  • p2.2 - 如果没有消息,它会睡一段时间。
  • p2.3 - 如果有新消息,则只需一封。
  • p2.4 - Java应用程序导入XMl文件,并根据消息上下文将http请求发送到相应的应用程序,包括数据
  • p2.5 - 消息由Java程序传递给C程序(参见Process Builder)。
  • p2.6 - 等待该过程完成。
  • p2.7 - 当过程完成时(20分钟后),转到第2.12页。

Xml Structure的方式如下。

   <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>