Política PublishMessage

Esta página se aplica a Apigee y Apigee hybrid.

Consulta la documentación de Apigee Edge.

La política PublishMessage te permite publicar información sobre el flujo de tu proxy de API en un tema de Google Cloud Pub/Sub. Pub/Sub de Google permite que los servicios se comuniquen de forma asíncrona, con una latencia significativamente menor. Para obtener más información sobre Pub/Sub, consulta ¿Qué es Pub/Sub? La información que quieras publicar en un tema de Pub/Sub puede ser texto literal o una variable de flujo. También puedes especificar una combinación de texto literal y variables de flujo mediante una plantilla de mensaje.

Si la solicitud de publicación se realiza correctamente, Apigee asigna a la variable de flujo publishmessage.message.id el valor devuelto por el servidor Pub/Sub. Para obtener más información, consulta Variables de flujo.

Esta política es una política estándar y se puede implementar en cualquier tipo de entorno. Para obtener información sobre los tipos de políticas y la disponibilidad de cada tipo de entorno, consulta Tipos de políticas.

Autenticación e implementación de proxy

Para ejecutar la política PublishMessage, necesitas un token de autenticación. Sin embargo, no hay ningún elemento <Authentication> explícito en la definición de la política. Debes desplegar tu proxy de API para usar la autenticación de Google, que añade el token de autenticación a la solicitud de forma interna. Para obtener información sobre cómo implementar un proxy de API que utilice la autenticación de Google, consulta los pasos de implementación. Además de usar la autenticación de Google en tu proxy de API, debes desplegarlo con una cuenta de servicio que tenga un rol con el permiso pubsub.topics.publish. Para obtener más información sobre los roles de Gestión de Identidades y Accesos (IAM) de Pub/Sub, consulta Permisos y roles.

<PublishMessage>

Especifica la política PublishMessage.

Valor predeterminado N/A
¿Es obligatorio? Obligatorio
Tipo Tipo complejo
Elemento principal N/A
Elementos secundarios <Attributes>
<CloudPubSub>
<DisplayName>
<IgnoreUnresolvedVariables>
<Source>
<UseMessageAsSource>

En la siguiente tabla se ofrece una descripción general de los elementos secundarios de <PublishMessage>:

Elemento secundario ¿Es obligatorio? Descripción
<Attributes> Opcional Conjunto de atributos que se adjuntarán al mensaje de Pub/Sub.
<CloudPubSub> Obligatorio Elemento principal de <Topic>. El elemento <Topic> especifica el tema de Pub/Sub en el que quieres publicar tu mensaje.
<DisplayName> Opcional Un nombre personalizado para la política.
<IgnoreUnresolvedVariables> Opcional Especifica si el procesamiento se detiene si Apigee encuentra una variable sin resolver.
<Source> Opcional Especifica el mensaje que se va a publicar en el tema de Pub/Sub. Este elemento es opcional, pero debes usar <Source> o <UseMessageAsSource>.
<UseMessageAsSource> Opcional Especifica el mensaje que se va a publicar en el tema de Pub/Sub. Este elemento es opcional, pero debes usar <Source> o <UseMessageAsSource>.
Otros elementos secundarios
<Topic> Obligatorio Elemento secundario de <CloudPubSub>. Especifica el tema de Pub/Sub en el que quieres publicar el mensaje.

El elemento <PublishMessage> utiliza la siguiente sintaxis:

Sintaxis

<PublishMessage continueOnError="[true|false]" enabled="[true|false]" name="Publish-Message-1">
    <DisplayName>DISPLAY_NAME</DisplayName>
    <Source>SOURCE_VALUE</Source>
    <CloudPubSub>
        <Topic>TOPIC_NAME</Topic>
    </CloudPubSub>
    <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</PublishMessage>

Ejemplo: fuente

En el ejemplo siguiente se muestra la definición de la política <PublishMessage>:

<PublishMessage continueOnError="false" enabled="true" name="Publish-Message-1">
    <DisplayName>Publish Message-1</DisplayName>
    <Source>this is a message template {flow-variable1}</Source>
    <CloudPubSub>
        <Topic>projects/{flow-variable-project-id}/topics/{flow-variable-topic-name}</Topic>
    </CloudPubSub>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</PublishMessage>

Ejemplo: UseMessageAsSource

Esta política <PublishMessage> especifica el elemento UseMessageAsSource:

<PublishMessage continueOnError="false" enabled="true" name="Publish-Message-2">
    <UseMessageAsSource>request</UseMessageAsSource>
    <CloudPubSub>
        <Topic>projects/{flow-variable-project-id}/topics/{flow-variable-topic-name}</Topic>
    </CloudPubSub>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</PublishMessage>

Ejemplo: atributos

Esta política <PublishMessage> especifica el elemento Attributes:

<PublishMessage name="Publish-Message-3">
  <Source>this is a message template {flow-variable1}</Source>
  <Attributes>
    <Attribute name='attr-name-0'>fixed-value</Attribute>
    <Attribute name='another-attribute-name'>{request.queryparam.attr1}</Attribute>
    <Attribute name='a-third-attribute-name'>{request.queryparam.attr2:default-value}</Attribute>
  </Attributes>
  <CloudPubSub>
    <Topic>projects/{flow-variable-project-id}/topics/{flow-variable-topic-name}</Topic>
  </CloudPubSub>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</PublishMessage>

Este elemento tiene los siguientes atributos que son comunes a todas las políticas:

Atributo Predeterminada (obligatorio) Descripción
name N/A Obligatorio

El nombre interno de la política. El valor del atributo name puede contener letras, números, espacios, guiones, guiones bajos y puntos. Este valor no puede superar los 255 caracteres.

De forma opcional, usa el elemento <DisplayName> para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

continueOnError falso Opcional Configúralo como false para mostrar un error cuando una política falla. Este es el comportamiento previsto para la mayoría de las políticas. Configúralo como true para continuar con la ejecución del flujo incluso después de que una política falle. También consulta:
enabled true Opcional Configúralo como true para aplicar la política. Configúralo como false para desactivar la política. La política no se aplicará, incluso si permanece conectada a un flujo.
async   falso Obsoleta Este atributo dejó de estar disponible.

Referencia de elemento secundario

En esta sección se describen los elementos secundarios de <PublishMessage>.

<Attributes>

Especifica los atributos que se adjuntarán al mensaje de Pub/Sub.

Cada atributo es un par clave-valor. El nombre asociado al atributo debe ser único. El valor de cada uno se determina de forma dinámica en el tiempo de ejecución mediante una plantilla de mensaje.

Valor predeterminado N/A
¿Es obligatorio? Obligatorio
Tipo Cadena
Elemento principal <PublishMessage>
Elementos secundarios Ninguno

El elemento <Attributes> utiliza la siguiente sintaxis:

Sintaxis

  <Attributes>
    <Attribute name='NAME-1'>fixed-value</Attribute>
    <Attribute name='NAME-2'>{flow-variable}</Attribute>
    ...
    <Attribute name='NAME-N'>message template here {flow-variable:default-value}</Attribute>
  </Attributes>

Ejemplo 1

En el siguiente ejemplo se define un solo atributo con un valor fijo en el mensaje cuando se publica:

<PublishMessage name="PM-with-one-attribute">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <Source>{request.queryparam.message}</Source>
  <Attributes>
    <Attribute name='my-attribute-1'>fixed-value</Attribute>
  </Attributes>
  <CloudPubSub>
    <Topic>projects/{request.queryparam.project}/topics/{request.queryparam.topic}</Topic>
  </CloudPubSub>
</PublishMessage>

Ejemplo 2

En el siguiente ejemplo se definen varios atributos en el mensaje cuando se publica. Los valores de algunos de ellos se determinan de forma dinámica en el tiempo de ejecución:

<PublishMessage name="PM-with-multiple-attributes">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <Source>{my-assembled-message}</Source>
  <Attributes>
    <Attribute name='attr-0'>fixed-value</Attribute>
    <Attribute name='attr-1'>{flow-variable1}</Attribute>
    <Attribute name='attr-2'>fixed portion {flow-variable2:default-value}</Attribute>
  </Attributes>
  <CloudPubSub>
    <Topic>projects/{propertyset.settings.project}/topics/{propertyset.settings.topic}</Topic>
  </CloudPubSub>
</PublishMessage>

<DisplayName>

Se usa junto con el atributo name para etiquetar la política en el editor de proxy de la interfaz de usuario de gestión con un nombre diferente que suene más natural.

El elemento <DisplayName> es común a todas las políticas.

Valor predeterminado N/A
¿Es obligatorio? Opcional. Si omite <DisplayName>, se usará el valor del atributo name de la política.
Tipo Cadena
Elemento principal <PolicyElement>
Elementos secundarios Ninguno

El elemento <DisplayName> utiliza la siguiente sintaxis:

Sintaxis

<PolicyElement>
  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
  ...
</PolicyElement>

Ejemplo

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

El elemento <DisplayName> no tiene atributos ni elementos secundarios.

<Source>

Especifica el mensaje que se va a publicar.

El mensaje puede ser un texto literal, una variable de flujo o una combinación de ambos en forma de plantilla de mensaje.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Cadena
Elemento principal <PublishMessage>
Elementos secundarios Ninguno

El elemento <Source> utiliza la siguiente sintaxis:

Sintaxis

 <Source>SOURCE</Source>

Example-1

En el siguiente ejemplo, se asigna a la variable de flujo flow-var-1 el mensaje de origen:

<Source>{flow-var-1}</Source>

Example-2

En el siguiente ejemplo se usa una plantilla de mensaje para publicar un mensaje JSON con contenido dinámico:

<PublishMessage name="PM-with-source-template">
  <Source>{
    "name": "value-1",
    "count": "{flow-variable1}",
    "action": "{flow-variable2}"
  }</Source>
  <Attributes>
    <Attribute name='content-type'>application/json</Attribute>
  </Attributes>
  <CloudPubSub>
    <Topic>projects/{propertyset.settings.project}/topics/{propertyset.settings.topic}</Topic>
  </CloudPubSub>
</PublishMessage>

<CloudPubSub>

Elemento principal de <Topic>.

Solo puedes publicar en un tema de Pub/Sub. Por lo tanto, solo puedes tener un elemento <Topic> en el elemento <CloudPubSub>.

Valor predeterminado N/A
¿Es obligatorio? Obligatorio
Tipo Tipo complejo
Elemento principal <PublishMessage>
Elementos secundarios <Topic>

El elemento <CloudPubSub> utiliza la siguiente sintaxis:

Sintaxis

<CloudPubSub>
  <Topic>TOPIC_NAME</Topic>
</CloudPubSub>

Ejemplo

En el siguiente ejemplo se muestra la declaración del elemento <CloudPubSub>:

<CloudPubSub>
  <Topic>projects/{my-project}/topics/{my-topic}</Topic>
</CloudPubSub>

<Topic>

Especifica el tema de Pub/Sub en el que quieres publicar el mensaje <Source>.

Debes especificar el nombre del tema en el formato projects/project-id/topics/topic-name.

Valor predeterminado N/A
¿Es obligatorio? Obligatorio
Tipo Cadena
Elemento principal <CloudPubSub>
Elementos secundarios Ninguno

El elemento <Topic> utiliza la siguiente sintaxis:

Sintaxis
<Topic>TOPIC_NAME</Topic>
Ejemplo

En el siguiente ejemplo se especifica el tema de Pub/Sub en el que se va a publicar:

<Topic>projects/project-id-marketing/topics/topic-name-test1</Topic>

En este ejemplo, project-id-marketing es el ID de tu proyecto de Google Cloud y topic-name-test1 es el tema en el que se debe publicar el mensaje.

<UseMessageAsSource>

Especifica el mensaje que se va a publicar.

Úsalo como alternativa al elemento <Source>. El valor debe ser el nombre de una variable de flujo que haga referencia a un mensaje, como request, response o message. Cuando especifica este elemento, la política usa el contenido del mensaje como mensaje que se va a publicar. Deberías usar este elemento en lugar de <Source> cuando el contenido del mensaje sea un flujo de octetos que no se pueda representar como una cadena, por ejemplo, el contenido de un archivo binario.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Cadena
Elemento principal <PublishMessage>
Elementos secundarios Ninguno

El elemento <UseMessageAsSource> utiliza la siguiente sintaxis:

Sintaxis

<PublishMessage name="PM-with-use-message-as-source">
  <UseMessageAsSource>MESSAGE_NAME</UseMessageAsSource>
  <Attributes>
    <Attribute name='attr-1'>{flowvar1}</Attribute>
  </Attributes>
  <CloudPubSub>
    <Topic>projects/{flowvar1}/topics/{flowvar-topic}</Topic>
  </CloudPubSub>
</PublishMessage>

Example-1

En el siguiente ejemplo, se indica a la política que use el contenido del mensaje de solicitud como carga útil del mensaje de Pub/Sub:

<PublishMessage name="PM-with-use-message-as-source">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <UseMessageAsSource>request</UseMessageAsSource>
  <Attributes>
    <Attribute name='attr-1'>{flowvar1}</Attribute>
  </Attributes>
  <CloudPubSub>
    <Topic>projects/{propertyset.settings.project}/topics/{propertyset.settings.topic}</Topic>
  </CloudPubSub>
</PublishMessage>

<IgnoreUnresolvedVariables>

Especifica si el procesamiento se detiene si Apigee encuentra una variable sin resolver.

Valor predeterminado Falso
¿Es obligatorio? Opcional
Tipo Booleano
Elemento principal <PublishMessage>
Elementos secundarios Ninguno

Asigna el valor true para ignorar las variables sin resolver y continuar con el procesamiento. De lo contrario, asigna el valor false. El valor predeterminado es false.

Asignar el valor true a <IgnoreUnresolvedVariables> no es lo mismo que asignar el valor true a continueOnError de <PublishMessage>. Si asigna el valor true a continueOnError, Apigee ignora todos los errores, no solo los de las variables.

El elemento <IgnoreUnresolvedVariables> utiliza la siguiente sintaxis:

Sintaxis

<IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>

Ejemplo

En el siguiente ejemplo se asigna true a <IgnoreUnresolvedVariables>:

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>

Variables de flujo

Las variables de flujo son objetos que contienen datos específicos y están disponibles en el contexto de un flujo de proxy de API. Estas variables almacenan información como la carga útil, la ruta de la URL, las direcciones IP y los datos de la ejecución de la política. Para obtener más información sobre las variables de flujo, consulta Usar variables de flujo.

Si la política PublishMessage publica correctamente en el tema de Pub/Sub, Apigee asigna a la variable de flujo publishmessage.message.id el messageId devuelto por el servidor de Pub/Sub. La variable de flujo es de tipo cadena y está disponible a partir del flujo de solicitud de proxy. En función de tus necesidades, puedes usar la variable de flujo en otras políticas posteriores. Sin embargo, si la publicación falla, Apigee no define la variable publishmessage.message.id, y el acceso a esta variable provocará errores.

Para obtener más información sobre los distintos tipos de variables de flujo, consulta la referencia de variables de flujo.

Códigos de error

En esta sección, se describen los códigos de falla y los mensajes de error que se muestran, y las variables de falla que establece Apigee cuando esta política activa un error. Esta información es importante para saber si estás desarrollando reglas de fallas con el propósito de manejar fallas. Para obtener más información, consulta Qué debes saber sobre los errores de políticas y Cómo solucionar fallas.

Errores de entorno de ejecución

Estos errores pueden producirse cuando se ejecuta la política.

Código de falla Estado de HTTP Causa
steps.publishmessage.PermissionDeniedError 500 Este error se produce cuando la cuenta de servicio del entorno de ejecución no puede actuar en nombre de una cuenta de servicio de proxy o la cuenta de servicio de proxy no tiene permiso para publicar en el tema.
steps.publishmessage.ExecutionError 500 Este error se produce si se produjo un error inesperado mientras se publicaba el mensaje en Pub/Sub. Puedes ver los detalles del error en el mensaje de error.
steps.publishmessage.MessageVariableNotMessageType 500 Este error se produce si no se puede resolver el nombre de la variable que especificaste en UseMessageAsSource o si no es un tipo de mensaje.

Variables con fallas

Cuando hay errores de ejecución en una política, Apigee genera mensajes de error. Puedes ver estos mensajes de error en la respuesta de error. Es posible que muchos mensajes de error generados por el sistema no sean relevantes en el contexto de tu producto. Te recomendamos personalizar los mensajes de error según el tipo de error para que los mensajes sean más significativos.

Para personalizar los mensajes de error, puedes usar reglas de falla o la política RaiseFault. Para obtener información sobre las diferencias entre las reglas de fallas y la política RaiseFault, consulta Política FaultRules en comparación con la política RaiseFault. Debes verificar las condiciones mediante el elemento Condition en las reglas de fallas y la política RaiseFault. Apigee proporciona variables de fallas únicas para cada política, y los valores de las variables de fallas se establecen cuando una política activa errores de entorno de ejecución. Si usas estas variables, puedes verificar las condiciones de error específicas y tomar las medidas adecuadas. Si deseas obtener más información para verificar las condiciones de error, consulta Condiciones de compilación.

Variables Donde Ejemplo
fault.name El fault.name puede coincidir con cualquiera de las fallas enumeradas en la tabla Errores del entorno de ejecución. El nombre de la falla es la última parte del código de la falla. fault.name Matches "UnresolvedVariable"
publishmessage.POLICY_NAME.failed POLICY_NAME es el nombre especificado por el usuario de la política que generó la falla. publishmessage.publish-message-1.failed = true
Para obtener más información sobre los errores de políticas, consulta Qué debes saber sobre los errores de políticas.