Неустранимая ошибка: неперехваченная ошибка: класс ‘Stomp’ не найден

Я скачал библиотеку, доступную в: https://github.com/dejanb/stomp-php

а затем реализовал следующий код:

<?php

use FuseSource\Stomp\Stomp;
(...)
$data=array($data1,$data2, $data3, $data4);
$json = json_encode($data, true);$user = getenv("ACTIVEMQ_USER");
if( !$user ) $user = "admin";

$password = getenv("ACTIVEMQ_PASSWORD");
if( !$password ) $password = "password";

$destination  = '/topic/event';
$messages = 10000;
$size = 256;

$DATA = "calls";
$body = $data;
for($i=0; $i< $size; $i++) {
$body .= $DATA[ $i % 26];
}

try {
$url = 'tcp://localhost:61613';
$con = new Stomp($url, $user, $password);

for($i=0; $i< $messages; $i++) {
$con->send($destination, $body);
if( $i%1000 == 0 ) {
echo "Sent ".$i." messages\n";
}
}

$stomp->send($destination, "SHUTDOWN");

} catch(StompException $e) {
echo $e->getMessage();
}
}

и я получаю эту ошибку:

Неустранимая ошибка: Uncaught Ошибка: класс ‘Stomp’ не найден в /opt/lampp/htdocs/skeleton-application/test.php:80

ОБНОВИТЬ:
Я переустановил с помощью composer как предложено в https://github.com/stomp-php/stomp-php.

Мне понадобился автозагрузчик использующий

<?php
require __DIR__ . '/../vendor/autoload.php';

и добавил следующий импорт

use Stomp\Client;
use Stomp\StatefulStomp;
use Stomp\Network\Connection;
use Stomp\Transport\Message;

Все та же ошибка … Мне нужно сделать что-то особенное с моим брокером activemq или что-то? Я запустил его через консоль … но все равно ничего

-1

Решение

Помимо путаницы, какой пакет использовать, у нашего кода есть следующие проблемы:

  • вы не импортировали используемые вами классы, и поэтому PHP не может найти классы в корневом пространстве имен
  • вы передаете параметры конструкторам и другим методам, которые не используются или имеют неправильный тип
  • у вас очевидно есть неопределенные переменные (например, $stomp не определено или отсутствует в примере кода)

Я предлагаю решать эти проблемы одну за другой.

С помощью fusesource/stomp-php

Импортируйте используемые вами классы

Настройте свой список импорта (это use заявления), чтобы включить классы, на которые вы ссылаетесь, в примере кода:

use FuseSource\Stomp\Exception\StompException;
use FuseSource\Stomp\Stomp;

Если в пакете есть еще классы, которые пропущены в вашем примере кода, включите их и в свой импорт.

Удалить ненужные параметры

Когда вы создаете экземпляр FuseSource\Stomp\Stomp, вы передаете параметры, которые конструктор не использует.

+ Изменить

$con = new Stomp($url, $user, $password);

в

$con = new Stomp($url);

Неопределенные переменные

У вас есть строка кода, где вы ссылаетесь на неопределенную переменную $stompгде вы, вероятно, намереваетесь использовать $con вместо.

+ Изменить

$stomp->send($destination, "SHUTDOWN");

в

$con->send($destination, new Message("SHUTDOWN"));

С помощью stomp-php/stomp-php

Импортируйте используемые вами классы

Настройте свой список импорта (это use заявления), чтобы включить классы, на которые вы ссылаетесь, в примере кода:

use Stomp\Client;
use Stomp\Exception\StompException;
use Stomp\StatefulStomp;
use Stomp\Transport\Message;

Если в пакете есть еще классы, которые пропущены в вашем примере кода, включите их и в свой импорт.

Удалить ненужные параметры

Конструктор Stomp\Stomp\StatefulStomp имеет другую подпись, чем у FuseSource\Stomp,

+ Изменить

$con = new Stomp($url, $user, $password);

в

$con = new StatefulStomp(new Client($url));

Отрегулируйте параметры до требуемого типа

Подпись send() изменился

+ Изменить

$con->send($destination, $body);

в

$con->send($destination, new Message($body));

Неопределенные переменные

У вас есть строка кода, где вы ссылаетесь на неопределенную переменную $stompгде вы, вероятно, намереваетесь использовать $con вместо.

+ Изменить

$stomp->send($destination, "SHUTDOWN");

в

$con->send($destination, new Message("SHUTDOWN"));

Для справки смотрите:

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector