我的代码很简单。我在https://github.com/stomp-php/stomp-php上使用库,并尝试从Artemis队列中读取消息。这只是一个简单的$stomp->read();
。
例外是:Was not possible to read data from stream.
,抛出[stomp-php目录] /src/Network/Connection.php第473行。
以下是流连接的上下文:
ssl:
peer_name: '[censored]'
cafile: '[censored certificate path].cer'
证书文件存在并且被正确读取(因为当我更改路径时,甚至在尝试发送消息之前就抛出了异常)。对等名称也是正确的,因为另一个名称会触发另一个错误,告诉我对等名称不正确。
我的测试很简单:我有一个发送消息的文件和一个读取它们的文件。当我不订阅队列时,发送始终有效。阅读有点凌乱。
新信息:当我从发送中删除5条特定消息时,读取似乎有效。这意味着如果我发送其中一个,那么读取会抛出异常。如果只有其他消息但没有这5个,那么阅读效果很好。我认为消息是有原因的,但是当我没有使用SSL连接时,一切都正常。
再次提供新信息:为了没有错误,我必须发送的每条消息都有大量的行。我试图再次发送其中一个并从内容(XML)中删除每个节点:它正常工作。所以我尝试了~900个节点:错误。 ~200个节点:错误。 ~130个节点:有时会出错。 ~80个节点:工作。
SSL有大邮件的麻烦吗?
再次提供新信息:我在库中尝试了var_dumping fread调用的结果。发生错误时,结果为空字符串('')。根据我在doc中读到的内容,fread在失败时返回false,在超时时返回空字符串。对于“再次出现的新信息”集团来说,这是有道理的,我们发现大量消息导致了这个问题。
我尝试使用60秒的stream_set_timeout(),我尝试手动发送心跳,我尝试用lib设置它,我尝试用lib更改超时,我尝试增加maxReadBytes。到目前为止没有任何工作。还是一样的行为。
通过将stomp-php库恢复到版本4.3.1修复:(