La cabecera del mensaje para cada mensaje de mandato de WebSphere MQ Telemetry Transport contiene una cabecera fija. En la tabla siguiente se muestra el formato de cabecera fija.
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
byte 1 | Tipo de mensaje | Distintivo DUP | Nivel de QoS | RETAIN | ||||
byte 2 | Longitud restante |
Contiene el tipo de mensaje y los campos de distintivos (DUP, nivel de QoS y RETAIN).
(Al menos un byte) contiene el campo Longitud restante.
Los campos se describen en las siguientes secciones. Todos los valores de datos están en orden big endian: los bytes de orden superior preceden a los bytes de orden inferior. Una palabra de 16 bits se presenta en una transmisión como el byte más significativo (MSB), seguido del byte menos significativo (LSB).
Se representa como un valor de 4 bits sin signo. Las enumeraciones para esta versión del protocolo se muestran en la tabla siguiente.
Mnemotécnico | Enumeración | Descripción |
---|---|---|
Reservado | 0 | Reservado |
CONNECT | 1 | Cliente solicita conectarse con un intermediario |
CONNACK | 2 | Reconocimiento de conexión |
PUBLISH | 3 | Mensaje de publicación |
PUBACK | 4 | Reconocimiento de publicación |
PUBREC | 5 | Publicación recibida (parte 1 de entrega asegurada) |
PUBREL | 6 | Liberación de publicación (parte 2 de entrega garantizada) |
PUBCOMP | 7 | Publicación completa (parte 3 de entrega garantizada) |
SUBSCRIBE | 8 | Petición de suscripción de cliente |
SUBACK | 9 | Reconocimiento de suscripción |
UNSUBSCRIBE | 10 | Petición de anulación de suscripción de cliente |
UNSUBACK | 11 | Reconocimiento de anulación de la suscripción |
PINGREQ | 12 | Petición PING |
PINGRESP | 13 | Respuesta PING |
DISCONNECT | 14 | El cliente se está desconectando |
Reservado | 15 | Reservado |
Los bits restantes del byte 1 contienen los campos DUP, QoS y RETAIN. Las posiciones de bits se codifican de modo que representen los distintivos como se muestra en la tabla siguiente.
Posición de bits | Nombre | Descripción |
---|---|---|
3 | DUP | Entrega duplicada |
2-1 | QoS | Calidad de servicio |
0 | RETAIN | Distintivo RETAIN |
Posición: byte 1, bit 3.
Este distintivo se establece cuando el cliente o el intermediario intenta volver a entregar un mensaje PUBLISH. Esto se aplica a los mensajes donde el valor de QoS es mayor que cero (0) y se requiere un reconocimiento. Cuando se establece el bit DUP, la cabecera variable incluye un ID de mensaje.
Posición: byte 1, bits 2-1.
Este distintivo indica el nivel de garantía para la entrega de un mensaje PUBLISH. Los niveles de QoS se muestran en la tabla siguiente.
Valor de QoS | bit 2 | bit 1 | Descripción | ||
---|---|---|---|---|---|
0 | 0 | 0 | Como máximo una vez | "Disparar y olvidarse" | <=1 |
1 | 0 | 1 | Al menos una vez | "Entrega reconocida" | >=1 |
2 | 1 | 0 | Exactamente una vez | "Entrega garantizada" | =1 |
3 | 1 | 1 | Reservado |
Posición: byte 1, bit 0.
Cuando está establecido, el distintivo RETAIN indica que el intermediario mantiene el mensaje y lo envía como un mensaje inicial a los nuevos suscriptores de este tema. Esto significa que un nuevo cliente que se conecte al intermediario puede establecer rápidamente el número actual de temas. Esto es útil donde los publicadores envían mensajes de una forma "informe por excepción" y puede transcurrir algo de tiempo para que un nuevo suscriptor reciba los datos sobre un tema concreto. Los datos tienen un valor de retenido o último bueno conocido (LKG).
Después de enviar un mensaje SUBSCRIBE a uno o más temas, un suscriptor recibe un mensaje SUBACK, seguido de un mensaje para cada tema recién suscrito que tiene un valor retenido. El valor retenido se publica desde el intermediario al suscriptor con el distintivo RETAIN establecido y con el mismo QoS con el que se publicó al principio y, por lo tanto, está sujeto a las garantías de entrega de QoS habituales. El distintivo RETAIN se establece en el mensaje para los suscriptores, para distinguirlo de los datos "activos" para que el suscriptor lo maneje correctamente.
Puesto que es posible que un intermediario ya no retenga un mensaje PUBLISH retenido anteriormente, no existe ninguna garantía de que el suscriptor vaya a recibir un mensaje PUBLISH retenido inicial en un tema.
Posición: byte 2.
Representa el número de bytes restantes dentro del mensaje actual, incluyendo los datos de la cabecera variable y la carga útil.
El esquema de codificación de longitud variable utiliza un único byte para mensajes con una longitud de hasta 127 bytes. Los mensajes más largos se manejan de la forma indicada a continuación. Siete bits de cada byte codifican los datos de longitud restante y el octavo bit indica los bytes que le siguen en la representación. Cada byte codifica 128 valores y un "bit de continuación". Por ejemplo, el número 64 decimal se codifica como un único byte, el valor decimal 64, hex 0x40. El número 321 decimal (=128x2 + 65) se codifica como dos bytes, el primero menos significativo. El primer byte es 2+128 = 130. Tenga en cuenta que el bit superior se establece para indicar al menos uno byte a continuación. El segundo byte es 65.
El protocolo limita el número de bytes en la representación de cuatro como máximo. Esto permite a las aplicaciones enviar mensajes de hasta 268 435 455 (256 MB). La representación de este número en la transmisión es: 0xFF, 0xFF, 0xFF, 0x7F.
En la tabla siguiente se muestran los valores de Longitud restante representados por números de bytes crecientes.
Dígitos | De | A |
---|---|---|
1 | 0 (0x00) | 127 (0x7F) |
2 | 128 (0x80, 0x01) | 16 383 (0xFF, 0x7F) |
3 | 16 384 (0x80, 0x80, 0x01) | 2 097 151 (0xFF, 0xFF, 0x7F) |
4 | 2 097 152 (0x80, 0x80, 0x80, 0x01) | 268 435 455 (0xFF, 0xFF, 0xFF, 0x7F) |
El algoritmo para codificar un número decimal (X) en el esquema de codificación de longitud variable es el siguiente:
do digit = X MOD 128 x = X DIV 128 // if there are more digits to encode, set the top bit of this digit if ( X > 0 ) digit = digit OR 0x80 endif 'output' digit while ( X > 0 )
donde MOD es el operador del módulo (% en C), DIV es la división de enteros (/ en C) y OR es el operador or de bit a bit (| en C).
El algoritmo para descodificar el campo Longitud restante es el siguiente:
multiplier = 1 value = 0 do digit = 'next digit from stream' value += (digit AND 127) * multiplier; multiplier *= 128; while ((digit AND 128) != 0);
donde AND es el operador and de bit a bit (& en C).
Cuando este algoritmo termina, value contiene la longitud restante en bytes.
La codificación de la longitud restante no forma parte de la cabecera variable. El número de bytes utilizado para codificar la longitud restante no contribuye al valor de la longitud restante. La longitud variable "bytes de extensión" forma parte de la cabecera fija, no de la cabecera variable.
Conceptos relacionados
WebSphere MQ Telemetry Transport
Referencia relacionada
Mensajes de mandatos de WebSphere MQ Telemetry Transport
Cabecera variable de WebSphere MQ Telemetry Transport
Carga útil de WebSphere MQ Telemetry Transport
Calidad de niveles de servicio y flujos de WebSphere MQ Telemetry Transport
Avisos |
Marcas registradas |
Descargas |
Biblioteca |
Soporte |
Información de retorno (feedback)
![]() ![]() |
ac10870_ |