Соединение с Артемидой через Stomp обрывается при попытке прочитать большие сообщения с использованием SSL - PullRequest
1 голос
/ 10 апреля 2019

Мой код довольно прост.Я использую библиотеку на https://github.com/stomp-php/stomp-php, и пытаюсь читать сообщения из очереди Артемиды.Это просто $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 .Это имело бы смысл с блоком «Новая информация снова», в котором мы обнаружили, что большие сообщения вызывают проблему.

Я пытался stream_set_timeout () в течение 60 секунд, я пытался отправить сердцебиение вручную, я пыталсяустановив его с помощью lib, я попытался изменить время ожидания с помощью lib и попытался увеличить maxReadBytes.Пока ничего не получалось.Все то же поведение.

1 Ответ

1 голос
/ 16 апреля 2019

Исправлено путем возврата библиотеки stomp-php к версии 4.3.1: (

...