2

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

问题一:

触发的可能性有哪些App1

App1中,我正在运行用语言.exe编写的文件C。评估需要 20 分钟。如果DBTesting在 20 分钟内多次修改,它会向 发送这么多数量的请求DBTestingApp1但我不想一次处理更多数量的请求。所以我想App1在队列库中触发。一旦之前Http的请求完成,那么只有 Queue 将被释放下一个 HTTP 请求。

问题2:

有没有办法使用Java或任何其他技术来实现这个

我们正在与此链接交互数据库

用户名:我的用户名

密码:我的密码

我们正在尝试从 1 周开始修复这些问题,但我们不知道哪种方法是好方法。

任何人都可以向我推荐一些适合我要求的教程。

谢谢。

4

2 回答 2

1

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

如果您使用的是MSSQL 服务代理,它已经提供了消息队列。您只需要弄清楚如何在您的情况下正确使用它。

这是到 JMS 桥的 Service Broker的链接。

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

使用以下步骤:

第1部分:

  • p1.1 - 使用MSSQL 服务代理设置队列。
  • p1.2 - 每次数据库更改时,向队列发送消息。

第2部分:

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

此链接可能会间接帮助您。

由于 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 分钟后),转到 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>
于 2013-08-02T08:59:41.947 回答
0

简单的方法是在您的数据库中创建一个带有 Http 请求的表和一个运行查询的程序,当找到结果时,如果不休眠则发出请求。

而(真){

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

 }else{
     // sleep 1s

}

}

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

谢谢

于 2013-08-02T07:58:46.820 回答