Я скачал библиотеку, доступную в: 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 или что-то? Я запустил его через консоль … но все равно ничего
Помимо путаницы, какой пакет использовать, у нашего кода есть следующие проблемы:
$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"));
Для справки смотрите:
Других решений пока нет …