本文介绍了同时Lotus Notes服务器端代理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

在我的Lotus Notes工作流应用程序中,我有一个预定的服务器代理(每五分钟一次).当用户对文档进行操作时,也会触发服务器端代理(此代理在服务器端修改所述文档).在生产中,我们收到许多关于处理不完整或有时根本没有处理的投诉.我检查了服务器配置,发现只有4个代理可以同时运行.作为一个拥有超过50,000个用户的全球应用程序,我唯一可以归咎于这些问题的是代理运行的数量,但是我不确定我是否正确(我是一名开发人员,并且对这些内容不了解) .有人可以帮助我(同时代理人)确定我的推理是否正确,并帮助我了解如何解决这个问题吗?你能提供给我参考吗?预先谢谢你!

In my Lotus Notes workflow application, I have a scheduled server agent (every five minutes). When user's act on a document, a server-side agent is also triggered (this agent modifies the said document, server-side). In the production, we are receiving many complaints that the processing are incomplete or sometimes not being processed at all. I checked the server configuration and found out that only 4 agents can run concurrently. Being a global application with over 50,000 users, the only thing that I can blame with these issues are the volume of agent run, but I'm not sure if I'm correct (I'm a developer and lacks knowledge about these stuffs). Can someone help me find if my reasoning is correct (on simulteneous agents) and help me understand how I can solve this? Can you provide me references please. Thank you in advance!

推荐答案

重要的事情要记住.

因此,如果您拥有具有代理X(5分钟)和Y(10分钟)的数据库A.它将首先运行X.一旦X完成,则接下来要运行的是下一个计划的(X或Y).如果它们在同一数据库中,则永远不会让您同时运行X +Y.

So if you have Database A with agent X (5 mins) and Y (10 mins). It will first run X. Once X completes which ever is scheduled next (X or Y) will run next. It will never let you run X + Y at the same time if they are in the same database.

此行为旨在阻止数据库代理内可能出现的死锁.

This is intended behaviour to stop possible deadlocks within the database agents.

此外,您还有一个计划队列,该队列将限制可以计划的座席数量.例如,如果您每隔5分钟就有一个Agent X,但是要花10分钟才能完成,那么您的计划队列将慢慢填满,然后空间不足.

Also you have an schedule queue which will have a limit to the number of agents that can be scheduled up. For example if you have Agent X every 5 minutes, but it takes 10 minutes to complete, your schedule queue will slowly fill up and then run out of space.

那么如何解决呢?有两种方法.

So how to work around this? There is a couple of ways.

选项1:使用服务器上的程序文档.

将代理设置为预定的从不",并让程序文档使用命令执行该代理.

Set the agent to scheduled "Never" and have a program document execute the agent with the command.

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

PRO:

  1. 您将能够在< 5分钟的时间表内运行代理.
  2. 您可以在同一个数据库中运行多个代理.

CON:

  1. 您必须了解代理正在与之交互的内容,并为其编写代码以处理同时运行的其他代理或自身.
  2. 这样做可能会严重影响性能.您需要了解服务器中正在发生的事情以及它将如何影响服务器.
  3. 如果数据库很多,则程序文档列表比较混乱,难以维护.
  4. 如果代理商超过服务器允许的代理商执行时间,则通过"Tell AMGR"的代理商将不会终止.他们必须被手工杀死.
  5. 有一种简单的方法可以确定正在运行/运行的代理.

选项2:创建一个呼出Web代理的代理.

PRO:

  1. 您将能够在< 5分钟的时间表内运行代理.
  2. 您可以在同一个数据库中运行多个代理.
  3. 您可以更好地控制通过其他代理运行的内容.

CON:

  1. 您需要在服务器上运行HTTP.
  2. 这样做会影响性能,并且您需要再次意识到如果运行多个实例或其他代理,它将如何与系统交互.
  3. 如果代理超过服务器上允许的代理执行时间,它们将不会终止.
  4. 您将需要允许服务器上的并发Web代理/Web服务,否则您可能会挂起服务器.

选项3:从预定触发更改为另一个触发.

例如当新邮件到达时".总体而言,这是三者中更好的选择.

For example "When new mail arrives". Overall this is the better option of the three.

...

最后,我要说的是,如果可以的话,您应该很少使用每5分钟执行一次",除非它是一个关键代理,不会由不同用户在不同数据库中执行.

In closing I would say that you should rarely use the "Execute every 5 mins" if you can, unless it is a critical agent that isn't going to be executed by multiple users across different databases.

这篇关于同时Lotus Notes服务器端代理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-07 01:21