Salesforce/PHP-散站消息(SOAP),时间的问题-见更新#2
-
20-09-2019 - |
题
销售团队发送了100个请求1的内部肥皂信息。同时发送这种类型的散装Ooutbound消息请求我的PHP script完成执行,但SF无法接受的ACK用于清楚的信息队列在销售团队方面的事情。找出消息记录(监测)我看到所有消息在待发状态的交货失败的原因"java。网。SocketTimeoutException:阅读时"。如果我的剧本已经完成的执行,为什么我会得到这个错误?
我已经尝试过这些方法来增加执行的时间我的服务器上,因为我没有接上销售团队的一面:
- set_time_limit(0);//脚本
- max_execution_time=360;最大的执行时间每个剧本,在几秒钟内
- max_input_time=360;最大量的时间,每个脚本可花析数据的请求
- memory_limit=32米;最大量的存储器可能会消耗一个脚本
我用高的设置,只是为了测试。
任何想法为什么这种失败的ACK送回Salesforce?
这里是一些代码:这是我接受和发送ACK文件imcoming肥皂请求
$data = 'php://input';
$content = file_get_contents($data);
if($content) {
respond('true');
} else {
respond('false');
}
在应对功能
function respond($tf) {
$ACK = <<<ACK
<?xml version = "1.0" encoding = "utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<notifications xmlns="http://soap.sforce.com/2005/09/outbound">
<Ack>$tf</Ack>
</notifications>
</soapenv:Body>
</soapenv:Envelope>
ACK;
print trim($ACK);
}
这些是在一个通用脚本,包括到脚本中使用的数据对特定工作流程。我可以处理有关25的请求(这是在1肥皂响应),但有一次,我走过去,我得到超时的错误在销售团队的队列。50请求通常需要我的PHP script86.77秒钟。
它可能是Apache?PHP?
我们还测试了接受100请求肥皂响应,只是接受和发送确认队列中清除出来,所以我知道这是在我这一边的事情。
我没有显示出错误的apache日志的运行脚的罚款。
我找到一些信息,在销售团队的网站,但仍未成功。这里是 链接.
我也使用PHP工具包11(chatter).
谢谢你的任何深入了解这一点, --菲尔
更新:
如果我收到进入的信息和打印的响应,这应该发生第一次不管我做什么之后?或者它不会等待我处理完成然后打印的反应?
更新#2:
好吧我觉得我有问题:PHP使用单线处理办法,并不会送回来的ACK文件,直到线已经完成了它的处理。是否有办法使这一辑阵线的过程?线#1-接受进入的肥皂请求,并送回ACK 线#2-进程的肥皂请求
我知道我能打破它就像一个数据表或平面文件,但是没有一种方法来完成这一没有这样做吗?
我要尝试关闭后插座ACK提交,并继续处理、交我的手指会的工作。
解决方案 5
所以我做了什么是:
- 接受所有来OBM,分析他们进入数据库
- 当这样做是踢过程中运行的背景(实际上是我送它到该背景,以便脚本可以结束)
- 送ACK文件回来的
通过只是接受的原始数据,分析入领域,并将其插入一个数据库是相当快。然后我的问题Linux的命令行命令,也发送的处理脚本运行的背景。然后我送ACK文件SF和脚本结束在规定时间内。它是麻烦的分裂脚本进程分为两个单独的阶段,但它的工作。
其他提示
听起来像站消息是击中的超时。其他用户已经报告了超时低至10秒(参见论坛的链接,下文)。沙盒实例,我用(cs1)是时间推后了大约1分钟,从我的测试。这有可能是超时是一个组织或实例级别上设置这Salesforce的控制。
两件事情你可以尝试:
打开支票 Salesforce看看他们是否能 增加的超时值 出站消息。从我的 经验,有很多 设置,他们可以上的修改 组织一级的-这个可能 他们中的一个。
卸载处理的数据,所以 这的确认立即发送 回到正确的选择。那么实际的 处理的数据将带 的地方是异步的。ie。消息 的队列,单独线,等等。
其他一些资源,可能是有帮助:
我认为他们的超时的事情在等着你的脚本结束。
有一个方法你可以尝试解决这个问题。
输出信封认消息开始,然后冲洗的事情,这样他们的服务器获取它的前端处理。没有纹,只是简单的优先事项重新思考:)
你是100%肯定的销售团队将等待的时间你的脚本需要太跑?80秒看起来像一个龙的时间太我。
如果所有请求都失败了,我猜想,Salesforce希望你设置的 Content-Type
标题适当,但是这个似乎不是这种情况。
我不知道Salesforce,但是如果你想要做一些多PHP你应该看看 这个代码的例子 更确切地说, pcntl_fork().
注:pcntl是 不 默认和不工作上的视窗平台。