Я пытаюсь создать JSON, который я хочу отправить от одного производителя другому, который позже должен разбить его и работать с ним.
Поэтому я использую activemq и stomp, так как я программирую на php.
У меня есть следующая программа для моего продюсера:
<?php
namespace Stomp;
require __DIR__ . '/../vendor/autoload.php';
use Stomp\Client;
use Stomp\StatefulStomp;
use Stomp\Network\Connection;
use Stomp\Transport\Message;
header('Content-Type: application/json');
//namespace buttoncall\Model;$provider=''; //colocar provider$data1= array(
'provider' => $provider
);
(...)
$data=array($data1,$data2, $data3, $data4);
$json = json_encode($data, true);
$destination = '/queue/nexmo';
$messages = 1;
$size = 1024;
$DATA = "calls";
//$body = $data;
$body = $json;
for($i=0; $i< $size; $i++) {
$body .= $DATA[ $i % 26];
}
try {
$connection = new Connection('tcp://192.168.64.2:61613');
$con1 = new StatefulStomp(new Client($connection));$con1->send($destination, new Message($body));
echo "Message sent $body \n" ;
$con1->send($destination, new Message("SHUTDOWN"));
} catch(StompException $e) {
echo $e->getMessage();
}
}
}
И тогда следующий потребитель:
<?php
//Nexmo
namespace Stomp;
require __DIR__ . '/../vendor/autoload.php';
include 'generate_jwt.php';
use Stomp\Client;
use Stomp\StatefulStomp;
use Stomp\Network\Connection;
use Stomp\Transport\Message;
$user = getenv("ACTIVEMQ_USER");
if( !$user ) $user = "admin";
$password = getenv("ACTIVEMQ_PASSWORD");
if( !$password ) $password = "admin";
/*$host = getenv("ACTIVEMQ_HOST");
if( !$host ) $host = "localhost";
$port = getenv("ACTIVEMQ_PORT");
if( !$port ) $port = 61613; */
$destination = '/queue/nexmo';try {
$connection = new Connection('tcp://192.168.64.2:61613');
$stomp = new StatefulStomp(new Client($connection));
$stomp->subscribe($destination);echo "Waiting for messages...\n";
while(true) {
$frame = $stomp->read();
echo "message received";
$json = $frame->$body;
//echo($stomp);
//echo($frame);
//echo($body);
echo $json ;
}} catch(StompException $e) {
echo $e->getMessage();
}
Я пробовал несколько комбинаций для печати тела, но, похоже, ничего не работает … Они оба общаются, и я вижу их в брокере ActiveMQ, но я не могу извлечь тело …
Есть какие-нибудь подсказки?
заранее спасибо
Я разобрался, просто имел:
$frame = $stomp->read();
$body = $frame->getBody();
echo "message received $body \n";
Для этого есть функция в библиотеке Stomp.
Других решений пока нет …