Esta página se aplica a Apigee y Apigee Hybrid.
Consulta la documentación de
Apigee Edge.
Descripción general
La política PublishMessage te permite publicar la información de flujo del 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 considerablemente menor. Para obtener más información sobre Pub/Sub, consulta ¿Qué es Pub/Sub?. La información que deseas publicar en un tema de Pub/Sub puede ser un 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 mensajes.
Si la solicitud de publicación se realiza correctamente, Apigee configura la variable de flujo publishmessage.message.id
en el valor que muestra el servidor de Pub/Sub. Para obtener más información, consulta Variables de flujo.
Esta 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 con cada tipo de entorno, consulta Tipos de políticas.
Implementación del proxy y autenticación
Para ejecutar la política PublishMessage, necesitas un token de autenticación. Sin embargo, no hay un elemento <Authentication> explícito en la definición de la política. Debes implementar el proxy de API para usar la autenticación de Google, que agrega el token de autenticación a la solicitud de forma interna. Para obtener información sobre cómo implementar un proxy de API que use la autenticación de Google, consulta Pasos para la implementación.
Además de usar la autenticación de Google en tu proxy de API, debes implementar tu proxy de API con una cuenta de servicio que tenga una función con el permiso pubsub.topics.publish
. Para obtener más información sobre las funciones de Identity and Access Management (IAM) para Pub/Sub, consulta Permisos y funciones.
<PublishMessage>
Especifica la política PublishMessage.
Valor predeterminado | N/A |
¿Es obligatorio? | Obligatorio |
Tipo | Tipo complejo |
Elemento principal | N/A |
Elementos secundarios |
<CloudPubSub> <DisplayName> <Source> |
En la siguiente tabla, se proporciona una descripción de alto nivel de los elementos secundarios de <PublishMessage>
.
Elemento secundario | ¿Es obligatorio? | Descripción |
---|---|---|
<CloudPubSub> |
Obligatorio | Elemento principal de <Topic> . El elemento <Topic> especifica el tema de Pub/Sub en el que deseas publicar tu mensaje. |
<DisplayName> |
Opcional | Un nombre personalizado para la política |
<IgnoreUnresolvedVariables> |
Opcional | Especifica si el procesamiento se detiene en caso de que Apigee encuentre una variable sin resolver. |
<Source> |
Obligatorio | Especifica el mensaje que se publicará. |
Otros elementos secundarios | ||
<Topic> |
Obligatorio | Especifica el tema de Pub/Sub en el que deseas publicar el mensaje. |
El elemento <PublishMessage>
usa la siguiente sintaxis:
Sintaxis
<?xml version="1.0" encoding="UTF-8"?><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
En el siguiente ejemplo, se muestra la definición de la política <PublishMessage>
:
<?xml version="1.0" encoding="UTF-8"?><PublishMessage continueOnError="false" enabled="true" name="Publish-Message-1"> <DisplayName>Publish Message-1</DisplayName> <Source>{flow-variable-1}</Source> <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 | Predeterminado | ¿Es obligatorio? | Descripción |
---|---|---|---|
name |
N/A | Obligatorio |
El nombre interno de la política. El valor del atributo Opcionalmente, usa el elemento |
continueOnError |
falso | Opcional | Asigna el valor false para devolver un error cuando falle una política. Este es el comportamiento esperado de la mayoría de las políticas. Asigna el valor true para que la ejecución del flujo continúe incluso después de que falle una política. Consulta también:
|
enabled |
true | Opcional | Asigna el valor true para aplicar la política. Selecciona false para desactivar la política. La política no se aplicará aunque siga adjunta a un flujo. |
async |
falso | Obsoleto | Este atributo está obsoleto. |
Referencia del elemento secundario
En esta sección, se describen los elementos secundarios de<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 publicará.
El mensaje puede ser un texto literal, una variable de flujo o una combinación de ambos en forma de una plantilla de mensajes.
Valor predeterminado | N/A |
¿Es obligatorio? | Obligatorio |
Tipo | String |
Elemento principal |
<PublishMessage> |
Elementos secundarios | Ninguno |
El elemento <Source>
usa la siguiente sintaxis:
Sintaxis
<Source>SOURCE</Source>
Example-1
En el siguiente ejemplo, se configura el mensaje fuente en el valor de la variable de flujo flow-var-1
:
<Source>{flow-var-1}</Source>
Example-2
En el siguiente ejemplo, se establece el mensaje fuente en source-message-text-01
:
<Source>source-message-text-01</Source>
<CloudPubSub>
Elemento principal de <Topic>
.
Puedes publicar en un solo 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>
usa la siguiente sintaxis:
Sintaxis
<CloudPubSub> <Topic>TOPIC_NAME</Topic> </CloudPubSub>
Ejemplo
En el siguiente ejemplo, se muestran la declaración del elemento <CloudPubSub>
:
<CloudPubSub> <Topic>projects/{request.header.project}/topics/{request.header.topic}</Topic> </CloudPubSub>
<Topic>
Especifica el tema de Pub/Sub en el que deseas 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 | Tipo complejo |
Elemento principal |
<CloudPubSub> |
Elementos secundarios | Ninguno |
El elemento <Topic>
usa la siguiente sintaxis:
Sintaxis
<Topic>TOPIC_NAME</Topic>
Ejemplo
En el siguiente ejemplo, se especifica el tema de Pub/Sub en el que se publicará lo siguiente:
<Topic>projects/project-id-marketing/topics/topic-name-test1</Topic>
En este ejemplo, project-id-marketing
es tu ID del proyecto de Google Cloud y topic-name-test1
es el tema en el que se debe publicar el mensaje <Source>
.
<IgnoreUnresolvedVariables>
Especifica si el procesamiento se detiene en caso de que Apigee encuentre una variable sin resolver.
Valor predeterminado | Falso |
¿Es obligatorio? | Opcional |
Tipo | Booleano |
Elemento principal |
<PublishMessage>
|
Elementos secundarios | Ninguno |
Configura el valor en true
para ignorar las variables sin resolver y continuar con el procesamiento; de lo contrario, false
. El valor predeterminado es false
.
Configurar <IgnoreUnresolvedVariables>
como true
es diferente a configurar continueOnError
como <PublishMessage>
en true
. Si configuras continueOnError
como true
, Apigee ignora todos los errores, no solo los errores de las variables.
El elemento <IgnoreUnresolvedVariables>
usa la siguiente sintaxis:
Sintaxis
<IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
Ejemplo
En el siguiente ejemplo, se configura <IgnoreUnresolvedVariables>
como true
:
<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 del proxy de API. Estas variables almacenan información como la información de la carga útil, la ruta de 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 Usa variables de flujo.
Si la política PublishMessage publica con éxito en el tema Pub/Sub, Apigee establece la variable de flujo publishmessage.message.id
en el campo messageId que muestra el servidor de Pub/Sub. La variable de flujo es de tipo de string y está disponible para ti a partir del flujo de solicitud de proxy en adelante. Según tus requisitos, puedes usar la variable de flujo en otras políticas descendentes. Sin embargo, si la publicación falla, Apigee no establece la variable publishmessage.message.id
y el acceso a esta variable causará errores.
Para obtener más información sobre varios tipos de variables de flujo, consulta Referencia de las variables de flujo.
Códigos de error
En esta sección se describen los códigos de error y los mensajes de error que devuelve Apigee, así como las variables de error que define, cuando esta política activa un error. Es importante que conozcas esta información si vas a desarrollar reglas de errores para gestionarlos. Para obtener más información, consulta Qué debes saber sobre los errores de políticas y Cómo gestionar los fallos.
Errores de tiempo de ejecución
Estos errores pueden producirse cuando se ejecuta la política.
Código de fallo | Estado de HTTP | Causa |
---|---|---|
steps.publishmessage.PermissionDeniedError |
500 |
Este error se produce cuando la cuenta de servicio de tiempo de ejecución no puede suplantar la identidad de la cuenta de servicio proxy o cuando la cuenta de servicio proxy no tiene permiso para publicar en el tema. |
steps.publishmessage.ExecutionError |
500 |
Este error se produce si se ha producido un error inesperado al publicar 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 has especificado en UseMessageAsSource
o si no es un tipo de mensaje.
|
Variables de error
Cuando se producen errores de ejecución en una política, Apigee genera mensajes de error. Puedes ver estos mensajes de error en la respuesta de error. En muchas ocasiones, los mensajes de error generados por el sistema pueden no ser relevantes en el contexto de su producto. Puede que quieras personalizar los mensajes de error en función del tipo de error para que sean más significativos.
Para personalizar los mensajes de error, puedes usar reglas de error o la política RaiseFault. Para obtener información sobre las diferencias entre las reglas de errores y la política RaiseFault, consulta Reglas de errores frente a la política RaiseFault.
Debes comprobar las condiciones mediante el elemento Condition
tanto en las reglas de errores como en la política RaiseFault.
Apigee proporciona variables de error únicas para cada política. Los valores de las variables de error se definen cuando una política activa errores de tiempo de ejecución.
Al usar estas variables, puede comprobar si se dan condiciones de error específicas y tomar las medidas oportunas. Para obtener más información sobre la comprobación de condiciones de error, consulta Crear condiciones.
Variables | Dónde | Ejemplo |
---|---|---|
fault.name |
El fault.name puede coincidir con cualquiera de los errores que se indican en la tabla Errores de tiempo de ejecución.
El nombre del error es la última parte del código de error. |
fault.name Matches "UnresolvedVariable" |
publishmessage.POLICY_NAME.failed |
POLICY_NAME es el nombre de la política especificado por el usuario que ha provocado el error. | publishmessage.publish-message-1.failed = true |