Solicitudes de trabajo asíncronas
En este tema se describen las solicitudes de trabajo asíncronas para operaciones de larga ejecución en los servicios de Oracle Cloud Infrastructure. También proporciona instrucciones para obtener el estado de la solicitud e inspeccionar la respuesta de la solicitud para activar el filtrado de los recursos afectados.
Visión general
Las llamadas de API a los servicios de Oracle Cloud Infrastructure pueden iniciar operaciones de larga ejecución que no completan la solicitud del cliente antes de que se devuelva una respuesta. En estos casos, el servicio genera una solicitud de trabajo asíncrona que permite la visibilidad en el progreso de las operaciones asíncronas de larga ejecución. La respuesta a la llamada de la API de REST contiene un ID de solicitud de trabajo en la cabecera opc-work-request-id
, lo que permite supervisar su progreso y estado. La solicitud de trabajo permanece en una cola hasta que la operación haya terminado.
Puede supervisar el estado de la solicitud de trabajo en cualquier momento llamando a GetWorkRequest
y transfiriendo el ID de la solicitud de trabajo.
Algunos servicios de Oracle Cloud Infrastructure, como Compute y Database, soportan solicitudes de trabajo mediante la API de solicitudes de trabajo, que contiene la operación GetWorkRequest
.
Algunos servicios ofrecen solicitudes de trabajo soportadas por la API de servicio en lugar de la API de solicitudes de trabajo que se trata en este tema. Estas API de servicio incluyen cada una las operaciones que funcionan de forma similar a la operación GetWorkRequest
utilizada por la API de solicitudes de trabajo.
Consulte la documentación de referencia de la API de solicitud de trabajo de cada servicio para obtener más información. Los enlaces a cada uno de ellos se proporcionan en la sección Para obtener más información.
Dos funciones de la respuesta de solicitud son de especial interés: el estado de la solicitud de trabajo y una lista de los recursos afectados por la solicitud de trabajo. El estado es importante porque las solicitudes de trabajo asíncronas deben saber cuándo se ha completado una operación, si aún se está ejecutando, o si ha fallado totalmente.
Para recuperar información sobre errores o fallos de solicitudes de trabajo, cada servicio proporciona API para recuperar información sobre errores y logs. Para ver los vínculos de la documentación de referencia de API para cada servicio, consulte la sección Para obtener más información.
También importante, en los casos en los que una operación de solicitud de trabajo afecta a varios recursos, es tener una lista de los recursos a los que afecta una solicitud de trabajo, junto con los atributos entityType
y actionType
de cada uno.
Estado de solicitud de trabajo
Las solicitudes de trabajo asíncronas permiten supervisar su progreso proporcionando un atributo de estado en el objeto WorkRequest
. Cada uno de los servicios soportados proporciona su propia API para obtener el estado, como se muestra en las siguientes secciones.
Hay una clase ContainerEngineWaiters que permite crear una devolución de llamada con el método
forWorkRequest
. Utilice esta API para reenviar una notificación cuando el estado de una operación cambie, por ejemplo, de IN_PROGRESS
a COMPLETED
.En la siguiente tabla, se muestran los atributos de estado soportados por el objeto WorkRequest
en los servicios correspondientes.
Servicio | Atributos de estado |
---|---|
Application Performance Monitoring |
|
Servicio de recuperación autónomo |
|
Big Data Service |
|
Blockchain Platform |
|
Grupos de colocación de cluster |
|
Compute |
|
Hub de conector |
|
Content Management |
|
Database Management |
|
OCI Database con PostgreSQL |
|
Data Catalog |
|
Data Integration |
|
Data Labeling |
|
Data Science |
|
Database |
|
Database Migration |
|
DevOps |
|
File Storage |
|
Gestión de aplicación de conjuntos |
|
Recuperación ante desastres de pila completa |
|
Instancia de Autonomous Database distribuida globalmente |
|
GoldenGate |
|
IAM |
|
Integration |
|
Java Management |
|
Motor de Kubernetes |
|
Equilibrador de carga |
|
Logging Analytics para LogAnalyticsQueryJobWorkRequest |
|
Logging Analytics para LogAnalyticsStorageWorkRequest |
|
Logging Analytics para LogAnalyticsConfigWorkRequest |
|
Management Agent |
|
Firewall de red |
|
Object Storage |
|
Oracle Cloud Bridge |
|
Oracle Cloud Migrations |
|
Hub de gestión de sistema operativo |
|
Automatización de procesos |
|
Cola |
|
Gestor de Recursos |
|
Escritorios seguros |
|
Service Mesh |
|
Filtrado de la respuesta de solicitud
En ocasiones debe saber qué recursos se ven afectados por una solicitud de trabajo asíncrona determinada. En los casos en los que la respuesta de la solicitud incluye solo uno o dos recursos afectados, es probable que el cuerpo de la respuesta de la solicitud sea suficiente. Sin embargo, en los casos en los que una respuesta de solicitud afecta a muchos recursos, debe filtrar la respuesta para identificar los recursos en los que está interesado.
El filtrado de los recursos mostrados en una respuesta de solicitud de trabajo se basa en dos atributos del tipo WorkRequestResource
: entityType
y actionType
.
- entityType: representa el tipo de recurso al que afecta la solicitud de trabajo. Este es un atributo opcional, pero cada recurso solo puede tener un
entityType
. - actionType: representa cómo el recurso especificado se ve afectado por la operación asociada a la solicitud de trabajo. Cada servicio especifica una lista fija de valores
actionType
permitidos (que se muestran en las secciones siguientes).
Para obtener información de recursos sobre una solicitud de trabajo, llame a GetWorkRequest
y transfiera el ID de la solicitud de trabajo. La llamada devuelve una respuesta en formato JSON. A continuación, se presenta un ejemplo de la llamada a GetWorkRequest
en el servicio Object Storage.
{
operationType: "COPY_OBJECT",
status: "IN_PROGRESS",
id: "f54527d6-029b-4221-9046-a811b7686202",
resources: [
{
entityType: "object",
actionType: "READ",
entityUri: "/n/mynamespace/b/backups/o/myobject"
},
{
entityType: "object",
actionType: "WRITTEN",
entityUri: "/n/mynamespace/b/backups/o/copyofmyobject"
},
],
timeAccepted: 2017-10-13T17:23:46.000Z,
timeStarted: 2017-10-13T17:23:52.198Z,
percentComplete: 10.0
}
Los diferentes servicios proporcionan respuestas ligeramente distintas. Consulte la documentación de referencia de la API de solicitud de trabajo de cada servicio para obtener más información. Los enlaces a cada uno de ellos se proporcionan en la sección Para obtener más información.
En la siguiente tabla se muestran los tipos de entidad y de acción soportados por los servicios de Oracle Cloud Infrastructure.
Nombre del servicio | Operación | entityType | actionType |
---|---|---|---|
Application Performance Monitoring | apm-domains |
|
|
Servicio de recuperación autónomo |
ChangeProtectionPolicyCompartment ChangeRecoveryServiceSubnetCompartment |
|
|
Blockchain Platform | instance
|
|
|
Grupos de colocación de cluster |
|
|
|
Content Management | oceInstance |
|
|
Database Management |
ChangeDbManagementPrivateEndpointCompartment CreateDbManagementPrivateEndpoint DeleteDbManagementPrivateEndpoint GetDbManagementPrivateEndpoint |
private-endpoints |
|
Database Migration |
|
|
|
OCI Database con PostgreSQL | |||
Data Catalog | catalog
|
|
|
Data Integration | disworkspace
|
|
|
Data Labeling | datalabelingdataset |
|
|
Data Science |
|
|
|
DevOps |
|
|
|
Recuperación ante desastres de pila completa |
|
|
|
Instancia de Autonomous Database distribuida globalmente |
ChangeShardedDatabaseCompartment |
|
|
GoldenGate |
|
|
|
Integration |
Nota: |
instance |
|
Motor de Kubernetes |
|
|
|
Equilibrador de carga | LoadBalancer
|
|
|
Management Agent | DeployPlugins | managementAgent |
|
Firewall de red |
|
|
|
Object Storage | CopyObject | object
|
|
Oracle Cloud Bridge | ocbworkrequest |
|
|
Oracle Cloud Migrations |
ChangeReplicationScheduleCompartment |
ocmworkrequest |
|
Hub de gestión de sistema operativo |
AttachManagedInstancesToLifecycleStage AttachManagedInstancesToManagedInstanceGroup AttachSoftwareSourcesToManagedInstance AttachSoftwareSourcesToManagedInstanceGroup DetachManagedInstancesFromLifecycleStage DetachManagedInstancesFromManagedInstanceGroup DetachSoftwareSourcesFromManagedInstance DisableModuleStreamOnManagedInstance DisableModuleStreamOnManagedInstanceGroup EnableModuleStreamOnManagedInstance EnableModuleStreamOnManagedInstanceGroup InstallModuleStreamProfileOnManagedInstance InstallModuleStreamProfileOnManagedInstanceGroup InstallPackagesOnManagedInstance InstallPackagesOnManagedInstanceGroup InstallWindowsUpdatesOnManagedInstance InstallAllWindowsUpdatesOnManagedInstancesInCompartment InstallWindowsUpdatesOnManagedInstanceGroup ManageModuleStreamsOnManagedInstance ManageModuleStreamsOnManagedInstanceGroup PromoteSoftwareSourceToLifecycleStage RefreshSoftwareOnManagedInstance RemoveModuleStreamProfileFromManagedInstance RemoveModuleStreamProfileFromManagedInstanceGroup RemovePackagesFromManagedInstance RemovePackagesFromManagedInstanceGroup ScheduledJob/RunScheduledJobNow SwitchModuleStreamOnManagedInstance UpdateAllPackagesOnManagedInstanceGroup UpdateAllPackagesOnManagedInstancesInCompartment |
|
|
Automatización de procesos | instance |
|
|
Cola | |||
Resource Manager |
|
|
|
Escritorios seguros |
|
|
|
Service Mesh |
CreateVirtualServiceRouteTable UpdateVirtualServiceRouteTable DeleteVirtualServiceRouteTable CreateIngressGatewayRouteTable UpdateIngressGatewayRouteTable |
|
|
Ejemplo de solicitud/respuesta
A continuación se muestra una secuencia de llamadas de API de REST para crear un cluster, que es una operación de larga ejecución común. El emisor de llamada recupera el ID de la solicitud de trabajo de la respuesta a la llamada POST
inicial y sondea WorkRequest
de forma periódica para determinar el estado de la operación. La secuencia de solicitud/respuesta que aparece a continuación muestra este flujo de trabajo:
- El usuario emite una llamada de API
CreateCluster
. - El servicio responde con el código de estado 202, lo que indica que la solicitud se ha aceptado y devuelve un ID de solicitud de trabajo en la cabecera
opc-work-request-id
. - A continuación, el usuario emite una llamada
GET
en el ID de la solicitud de trabajo para obtener el estado de la solicitud de trabajo. - El servicio responde con el código de estado 200, lo que indica en el cuerpo de la respuesta que la operación
CLUSTER_CREATE
tiene el estadoACCEPTED
. - Con el sondeo continuado, vemos otra llamada
GET
para la solicitud de trabajo. - El servicio responde con el código de estado 200. El cuerpo de la respuesta informa de que la operación ha sido correcta (
SUCCEEDED
).
Paso 1. Llamada de API inicial para iniciar una operación CLUSTER_CREATE
.
POST https://containerengine.eu-frankfurt-1.oraclecloud.com/20180222/clusters
Accept: application/json
authorization: <Redacted>
content-length: 480
Content-Type: application/json
date: Mon, 02 Jul 2018 18:20:03 GMT
host: containerengine.eu-frankfurt-1.oraclecloud.com
opc-client-info: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT
opc-request-id: D7A390ED909C47038C438BA3629FB612
User-Agent: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT (Mac OS X/10.13.5; Java/1.8.0_172; Java HotSpot(TM) 64-Bit Server VM/25.172-b11)
x-content-sha256: S8U8OKQHyTLNViAzgexkjxvF4ctncJJHTjuRfXn0ya4={
"name":"JavaSDK.CRUD",
"compartmentId":"ocid1.compartment.oc1..<unique_ID>",
"vcnId":"ocid1.vcn.oc1.eu-frankfurt-1.<unique_ID>",
"kubernetesVersion":"v1.10.3",
"options":{"serviceLbSubnetIds":["ocid1.subnet.oc1.eu-frankfurt-1.<unique_ID>",
"ocid1.subnet.oc1.eu-frankfurt-1.<unique_ID>"]}}
Paso 2. Respuesta a la llamada de API inicial, que contiene el ID de la solicitud de trabajo en la cabecera Opc-Work-Request-Id
.
202
Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: opc-work-request-id
Content-Length: 0
Date: Mon, 02 Jul 2018 18:20:04 GMT
Opc-Request-Id: D7A390ED909C47038C438BA3629FB612/33EEDCAAB2E84508B34AA75CD0FD86F4/8261D1CC89814E9BB934440A1F43DA09
Opc-Work-Request-Id: ocid1.clustersworkrequest.oc1.eu-frankfurt-1.exampleuniqueID
Uri: /20180222/clusters
Vary: Accept-Encoding
X-Rate-Limit-Duration: 1
X-Rate-Limit-Limit: 16.70
X-Rate-Limit-Request-Forwarded-For: 10.237.10.0, 10.237.9.51
X-Rate-Limit-Request-Remote-Addr: 10.237.9.51:53077
Paso 3. Puesto que esta es una operación de larga ejecución, el usuario sondea periódicamente la solicitud de trabajo con una llamada GET
para determinar su estado.
GET https://containerengine.eu-frankfurt-1.oraclecloud.com/20180222/workRequests/<clusters_work_request_OCID>
Accept: application/json
authorization: <Redacted>
date: Mon, 02 Jul 2018 18:20:04 GMT
host: containerengine.eu-frankfurt-1.oraclecloud.com
opc-client-info: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT
opc-request-id: E8F20DAC443346B3B0EA599F367EE294
User-Agent: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT (Mac OS X/10.13.5; Java/1.8.0_172; Java HotSpot(TM) 64-Bit Server VM/25.172-b11)
Paso 4. La llamada GET
devuelve la siguiente respuesta, lo que indica en el cuerpo de la respuesta que la operación CLUSTER_CREATE
tiene el estado ACCEPTED
.
200
Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: opc-work-request-id
Content-Length: 717
Content-Type: application/json
Date: Mon, 02 Jul 2018 18:20:05 GMT
Etag: 56a41efaf33d81a54933495ee910c24d7bce7a83adf18810f95e07bdd2055805
Opc-Request-Id: E8F20DAC443346B3B0EA599F367EE294/8B19C9FC3B4442CEA14685D1973D0856/0BA60B0711764DE4A4373071632708C7
Retry-After: 30
Uri: /20180222/workRequests/_id_
Vary: Accept-Encoding
X-Rate-Limit-Duration: 1
X-Rate-Limit-Limit: 16.70
X-Rate-Limit-Request-Forwarded-For: 10.237.10.0, 10.237.9.51
X-Rate-Limit-Request-Remote-Addr: 10.237.9.51:43533
{
"id": "ocid1.clustersworkrequest.oc1.eu-frankfurt-1.exampleuniqueID",
"operationType": "CLUSTER_CREATE",
"status": "ACCEPTED",
"compartmentId": "ocid1.compartment.oc1..exampleuniqueID",
"resources": [
{
"actionType": "IN_PROGRESS",
"entityType": "cluster",
"identifier": "ocid1.cluster.oc1.eu-frankfurt-1.exampleuniqueID",
"entityUri": "/clusters/ocid1.cluster.oc1.eu-frankfurt-1.exampleuniqueID"
}
],
"timeAccepted": "2018-07-02T18:20:05Z",
"timeStarted": null,
"timeFinished": null
}
Paso 5. La operación continúa y el usuario sigue sondeando la solicitud de trabajo mediante el método GET
.
GET https://containerengine.eu-frankfurt-1.oraclecloud.com/20180222/workRequests/<clusters_work_request_OCID>
Accept: application/json
authorization: <Redacted>
date: Mon, 02 Jul 2018 18:24:13 GMT
host: containerengine.eu-frankfurt-1.oraclecloud.com
opc-client-info: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT
opc-request-id: 64595B97E39A471A886DA29966BB6B1D
User-Agent: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT (Mac OS X/10.13.5; Java/1.8.0_172; Java HotSpot(TM) 64-Bit Server VM/25.172-b11)
Paso 6. La última llamada GET
ha producido la siguiente respuesta, lo que indica que la operación ha terminado. Tenga en cuenta que el valor de entityType
es "cluster" y el de actionType
es "CREATED".
200
Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: opc-work-request-id
Content-Length: 750
Content-Type: application/json
Date: Mon, 02 Jul 2018 18:24:14 GMT
Etag: 023d2a8ccb6d893fa8c875f64652353f21d22607825f49eeeb15b5394ae24918
Opc-Request-Id: 64595B97E39A471A886DA29966BB6B1D/3A81140991C94794AF365016E31DBE82/6245FBD8C25842B6BDF15187EA6ADB21
Uri: /20180222/workRequests/_id_
Vary: Accept-Encoding
X-Rate-Limit-Duration: 1
X-Rate-Limit-Limit: 16.70
X-Rate-Limit-Request-Forwarded-For: 10.237.3.0, 10.237.40.183
X-Rate-Limit-Request-Remote-Addr: 10.237.40.183:55856
{
"id": "ocid1.clustersworkrequest.oc1.eu-frankfurt-1.exampleuniqueID",
"operationType": "CLUSTER_CREATE",
"status": "SUCCEEDED",
"compartmentId": "ocid1.compartment.oc1..exampleuniqueID",
"resources": [
{
"actionType": "CREATED",
"entityType": "cluster",
"identifier": "ocid1.cluster.oc1.eu-frankfurt-1.exampleuniqueID",
"entityUri": "/clusters/ocid1.cluster.oc1.eu-frankfurt-1.exampleuniqueID"
}
],
"timeAccepted": "2018-07-02T18:20:05Z",
"timeStarted": "2018-07-02T18:20:10Z",
"timeFinished": "2018-07-02T18:24:01Z"
}
Para obtener más información
- API de solicitud de trabajo de Application Performance Monitoring
- API de solicitud de trabajo de Autonomous Recovery Service
- API de solicitud de trabajo de Bastion
- Solicitudes de trabajo de Blockchain Platform
- API de solicitud de trabajo de Cloud Advisor
- API de solicitud de trabajo de grupos de colocación de cluster
- API de solicitud de trabajo de Compute
-
Hub de conector:
- API de solicitud de trabajo de Container Instances
- API de solicitud de trabajo de Content Management
-
Catálogo de datos:
- API de solicitud de trabajo de Data Integration
-
Etiquetado de Datos:
-
Data Science:
- API de solicitud de trabajo de Database
- API de solicitud de trabajo de Database Management
- API de solicitud de trabajo de Database Migration
- API de solicitud de trabajo de Database Tools
- OCI Database con API de solicitud de trabajo PostgreSQL
- API de solicitud de trabajo de DevOps
- API de solicitud de trabajo de File Storage
- API de solicitud de trabajo de Fleet Application Management
- API de solicitud de trabajo de Full Stack Disaster Recovery
- API de solicitud de trabajo de Autonomous Database distribuida globalmente
- API de solicitud de trabajo de GoldenGate
-
IAM:
- API de solicitud de trabajo de Integration
- API de solicitud de trabajo de Java Management
- API de solicitud de trabajo de Kubernetes Engine
-
Load Balancer:
- API de solicitud de trabajo de Logging Analytics
- API de solicitud de trabajo de Management Agent
- API de solicitud de trabajo HeatWave
- API de solicitud de trabajo de Network Firewall
-
Object Storage:
- API de solicitud de trabajo de Oracle Cloud Bridge
- API de solicitud de trabajo de Oracle Cloud Migrations
- API de solicitud de trabajo de OS Management Hub
- API de solicitud de trabajo de Process Automation
- API de solicitud de trabajo de Queue
- API de solicitud de trabajo de Resource Manager
- API de solicitud de trabajo de escritorios seguros
- API de solicitud de trabajo de Service Mesh
- API de solicitud de trabajo de Stack Monitoring
- API de solicitud de trabajo de Vision
- Visual Builder Studio: API de WorkRequest
- API de solicitud de trabajo de Vulnerability Scanning