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

问题描述 投票:1回答:1

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

Expected behaviour:

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

What is happening:

  • 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个,那么阅读效果很好。我认为消息是有原因的,但是当我没有使用SSL连接时,一切都正常。

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

SSL有大邮件的麻烦吗?

再次提供新信息:我在库中尝试了var_dumping fread调用的结果。发生错误时,结果为空字符串('')。根据我在doc中读到的内容,fread在失败时返回false,在超时时返回空字符串。对于“再次出现的新信息”集团来说,这是有道理的,我们发现大量消息导致了这个问题。

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

php ssl stomp activemq-artemis
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.