Lotus同时注意服务器端代理

时间:2013-01-17 14:41:53

标签: lotus-notes lotus-domino background-agents

在我的Lotus Notes工作流应用程序中,我有一个计划的服务器代理(每五分钟一次)。当用户对文档执行操作时,还会触发服务器端代理(此代理会修改所述文档,服务器端)。在制作过程中,我们收到很多关于处理不完整或有时根本没有处理的投诉。我检查了服务器配置,发现只有4个代理可以同时运行。作为一个拥有超过50,000个用户的全球应用程序,我唯一可以归咎于这些问题的是代理运行量,但我不确定我是否正确(我是开发人员并且缺乏对这些东西的了解) 。有人可以帮助我找到我的推理是否正确(在同时代理上)并帮助我理解我如何解决这个问题?你能告诉我参考资料吗?提前谢谢!

1 个答案:

答案 0 :(得分:3)

要记住的重要事项。

服务器上的预定代理只会在任何给定时间从同一数据库运行一个代理!

因此,如果您的数据库A包含代理X(5分钟)和Y(10分钟)。它将首先运行X.一旦X完成,接下来将安排下一个(X或Y)。如果它们位于同一个数据库中,它将永远不会让您同时运行X + Y.

这是用于停止数据库代理中可能出现的死锁的行为。

此外,您还有一个计划队列,该计划队列可以对可以计划的代理数量进行限制。例如,如果您每5分钟有一个代理X,但需要10分钟才能完成,您的计划队列将慢慢填满,然后用完空间。

那么如何解决这个问题呢?有几种方法。

选项1:在服务器上使用程序文档。

将代理设置为已安排的“从不”,并让程序文档使用该命令执行代理。

tell amgr run "dir/database.nsf" 'agentName' 

<强> PRO:

  1. 您可以在&lt; 5分钟计划中运行座席。
  2. 您可以在同一个数据库中运行多个代理。
  3. CON:

    1. 您必须了解代理与之交互的内容,并为其处理其他代理或其自身同时运行的代码。
    2. 这样做会对性能造成严重影响。您需要了解服务器中发生了什么以及它将如何影响它。
    3. 如果你有很多数据库,你的程序文档列表很乱,很难维护。
    4. 如果代理超过服务器上允许的代理执行时间,则不会终止通过“Tell AMGR”的代理。他们必须被手动杀死。
    5. 可以轻松确定正在运行/运行的代理程序。
    6. 选项2:创建一个调用Web代理的代理。

      <强> PRO:

      1. 您可以在&lt; 5分钟计划中运行座席。
      2. 您可以在同一个数据库中运行多个代理。
      3. 您可以更好地控制通过其他代理运行的内容。
      4. CON:

        1. 您需要在服务器上运行HTTP。
        2. 执行此操作会对性能产生影响,如果运行多个实例或其他代理,您需要了解它与系统的交互方式。
        3. 如果代理超过服务器允许的代理执行时间,则不会终止代理。
        4. 您需要在服务器上允许并发Web代理/ Web服务,否则您可能会挂起服务器。
        5. 选项3:从预定触发器更改为另一个触发器。

          例如“当新邮件到达时”。总的来说,这是三者中更好的选择。

          ...

          最后我会说,如果可以的话,你应该很少使用“每5分钟执行一次”,除非它是不会被不同数据库中的多个用户执行的关键代理。