尝试使用SSL阅读大邮件时,通过Stomp与Artemis的连接中断

时间:2019-04-10 18:08:07

标签: php ssl stomp activemq-artemis

我的代码非常简单。我正在https://github.com/stomp-php/stomp-php处使用该库,并尝试从Artemis队列中读取消息。这只是一个简单的$stomp->read();

预期行为:

  • 我从队列中收到一条消息,或者被告知队列中没有消息

发生了什么事

  • read方法引发异常(请参见下文)
  • 当我们不使用SSL进行连接时,如果没有基本的TCP连接且没有证书,则一切正常。仅当我们使用ssl方案,SSL端口和证书进行连接时,这种情况才会发生。

例外是: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个,则读取将引发异常。如果只有其他消息,而没有这5条消息,则阅读效果很好。我认为消息是有原因的,但是同样,当我不使用SSL进行连接时,一切正常。

再次提供新信息:为了不必出错,我不必发送的每条消息都有很多行。我尝试再次发送其中一个,并从其内容(XML)中删除每个节点,但删除一个:它正常工作。所以我尝试了约900个节点:错误。 〜200个节点:错误。 〜130个节点:有时会出错。约80个节点:正在工作。

SSL遇到大邮件问题吗?

再次提供新信息:我尝试var_dumping库中fread调用的结果。发生错误时,结果为空字符串('')。根据我在文档中看到的内容,fread在失败时返回false,在 timeout 上返回空字符串。使用“再次提供新信息”集团是有意义的,在该集团中,我们发现大邮件正在引起问题。

我尝试了60秒的stream_set_timeout(),尝试手动发送心跳,尝试通过lib设置它,尝试通过lib更改超时,并尝试增加maxReadBytes。到目前为止没有任何工作。还是一样的行为。

1 个答案:

答案 0 :(得分:1)

通过将stomp-php库恢复到4.3.1版来修复:(