PHP 8.4.6 Released!

Stomp::readFrame

stomp_read_frame

(PECL stomp >= 0.1.0)

Stomp::readFrame -- stomp_read_frameLeer la siguiente trama

Descripción

Estilo orientado a objetos (método):

public Stomp::readFrame(string $class_name = "stompFrame"): stompframe

Estilo por procedimientos:

stomp_read_frame(resource $link): array

Lee la siguiente trama. Es posible crear una instancia de un objeto de una clase específica, y pasar parámetros al constructor de esa clase.

Parámetros

link

Sólo estilo por procediminetos: El identificador de enlace Stomp devuelto por stomp_connect().

class_name

El nombre de la clase a instanciar. Si no se especifica, un objeto stompFrame es devuelto.

Valores devueltos

Nota:

Un header de transacción puede ser especificado, indicando que el mensaje de Acknowledgment debería formar parte del nombre de la transacción.

Historial de cambios

Versión Descripción
PECL stomp 0.4.0 El parámentro class_name fue añadido.

Ejemplos

Ejemplo #1 Estilo orientado a objetos

<?php

/* conexión */
try {
$stomp = new Stomp('tcp://localhost:61613');
} catch(
StompException $e) {
die(
'Connection failed: ' . $e->getMessage());
}

/* suscribirse a mensajes de la cola 'foo' */
$stomp->subscribe('/queue/foo');

/* leer una trama */
var_dump($stomp->readFrame());

/* cerrar la conexión */
unset($stomp);

?>

El resultado del ejemplo sería algo similar a:

object(StompFrame)#2 (3) {
  ["command"]=>
  string(7) "MESSAGE"
  ["headers"]=>
  array(5) {
    ["message-id"]=>
    string(41) "ID:php.net-55293-1257226743606-4:2:-1:1:1"
    ["destination"]=>
    string(10) "/queue/foo"
    ["timestamp"]=>
    string(13) "1257226805828"
    ["expires"]=>
    string(1) "0"
    ["priority"]=>
    string(1) "0"
  }
  ["body"]=>
  string(3) "bar"
}

Ejemplo #2 Estilo por procedimientos

<?php

/* conexión */
$link = stomp_connect('ssl://localhost:61612');

/* comprobar la conexión */
if (!$link) {
die(
'Connection failed: ' . stomp_connect_error());
}

/* suscribirse a mensajes de la cola 'foo' */
stomp_subscribe($link, '/queue/foo');

/* leer una trama */
$frame = stomp_read_frame($link);

/* cerrar la conexión */
stomp_close($link);

?>

El resultado del ejemplo sería algo similar a:

array(3) {
  ["command"]=>
  string(7) "MESSAGE"
  ["body"]=>
  string(3) "bar"
  ["headers"]=>
  array(6) {
    ["transaction"]=>
    string(2) "t1"
    ["message-id"]=>
    string(41) "ID:php.net-55293-1257226743606-4:3:-1:1:1"
    ["destination"]=>
    string(10) "/queue/foo"
    ["timestamp"]=>
    string(13) "1257227037059"
    ["expires"]=>
    string(1) "0"
    ["priority"]=>
    string(1) "0"
  }
}

add a note

User Contributed Notes 1 note

up
0
hasan dot ucak at gmail dot com
7 years ago
/* php.ini
[stomp]
stomp.default_connection_timeout_sec = 10
stomp.default_read_timeout_sec = 15

these values should not be left by default.
if queue server very busy and there is a lot message in queue ,
not respond to frame in two second.
*/

try {
$stomp = new Stomp(self::geturl, self::username, self::password,array('client-id'=> gethostname()."-".uniqid(mt_rand(), true)));

$stomp->subscribe(self::getqueue, array('selector' => sprintf(self::selector, $queue_id)));

/* read a frame */

$frame = $stomp->readFrame();
if ($frame) {
$stomp->ack($frame);
unset($stomp);
return $frame;
}
unset($stomp);
return false;
} catch (StompException $e) {
print ('Connection failed: ' . $e->getMessage());
unset($stomp);
return false;
}

/* close connection */
unset($stomp);
To Top