Richieste di lavoro asincrone
Questo argomento descrive le richieste di lavoro asincrone per le operazioni con tempi di esecuzione lunghi sui servizi Oracle Cloud Infrastructure. Fornisce inoltre indicazioni su come ottenere lo stato della richiesta e su come ispezionare la risposta della richiesta per abilitare il filtro per le risorse interessate.
Panoramica
Le chiamate API ai servizi Oracle Cloud Infrastructure possono avviare operazioni con tempi di esecuzione lunghi che non completano la richiesta del client prima che venga restituita una risposta. In questi casi, il servizio genera una richiesta di lavoro asincrona che consente la visibilità sullo stato di avanzamento delle operazioni asincrone con tempi di esecuzione lunghi. La risposta alla chiamata API REST contiene un ID richiesta di lavoro nell'intestazione opc-work-request-id
, che consente di monitorarne l'avanzamento e lo stato. La richiesta di lavoro rimane in coda fino al completamento dell'operazione.
È possibile monitorare lo stato della richiesta di lavoro in qualsiasi momento chiamando GetWorkRequest
e passando l'ID della richiesta di lavoro.
Alcuni servizi Oracle Cloud Infrastructure, come Compute e Database, supportano le richieste di lavoro utilizzando l'API delle richieste di lavoro, che contiene l'operazione GetWorkRequest
.
Alcuni servizi offrono richieste di lavoro supportate dall'API del servizio anziché dall'API Richieste di lavoro descritta in questo argomento. Ciascuna di queste API di servizio include operazioni che funzionano in modo simile all'operazione GetWorkRequest
utilizzata dall'API delle richieste di lavoro.
Per i dettagli, consultare la documentazione di riferimento per l'API delle richieste di lavoro di ciascun servizio. I collegamenti a ciascuno sono disponibili nella sezione Per ulteriori informazioni.
Due caratteristiche della risposta alla richiesta sono di particolare interesse: lo stato della richiesta di lavoro e un elenco delle risorse interessate dalla richiesta di lavoro. Lo stato è importante perché le richieste di lavoro asincrone devono sapere quando un'operazione è stata completata, è ancora in esecuzione o se non è riuscita del tutto.
Per recuperare informazioni su errori o errori delle richieste di lavoro, ogni servizio fornisce API per il recupero di informazioni su errori e log. Per i collegamenti alla documentazione di riferimento API per ciascuno dei servizi, vedere la sezione Per ulteriori informazioni.
Importante anche nei casi in cui un'operazione di richiesta di lavoro influisce su diverse risorse è avere un elenco delle risorse interessate da una richiesta di lavoro, insieme agli attributi entityType
e actionType
di ognuno.
Stato della richiesta di lavoro
Le richieste di lavoro asincrone consentono di monitorare lo stato di avanzamento fornendo un attributo di stato sull'oggetto WorkRequest
. Ciascuno dei servizi supportati fornisce la propria API per ottenere lo stato, come indicato nelle sezioni seguenti.
È disponibile una classe ContainerEngineWaiters che consente di creare un callback utilizzando il metodo
forWorkRequest
. Utilizzare questa API per inoltrare una notifica quando lo stato di un'operazione cambia, ad esempio da IN_PROGRESS
a COMPLETED
.Nella tabella seguente sono elencati gli attributi di stato supportati dall'oggetto WorkRequest
nei rispettivi servizi.
Servizio | Attributi di stato |
---|---|
Application Performance Monitoring |
|
Autonomous Recovery Service |
|
Servizio Big Data |
|
Piattaforma Blockchain |
|
Gruppi di posizionamento cluster |
|
Calcola |
|
Hub connettore |
|
Gestione dei contenuti |
|
Gestione database |
|
Database OCI con PostgreSQL |
|
Catalogo dati |
|
Integrazione dei dati |
|
Etichettatura dati |
|
Data science |
|
Database |
|
Migrazione del database |
|
Settore DevOps |
|
Storage di file |
|
Storage di file con Lustre |
|
Gestione delle applicazioni della flotta |
|
Full Stack Disaster Recovery |
|
Globally Distributed Autonomous Database |
|
Globally Distributed Exadata Database on Exascale Infrastructure |
|
GoldenGate |
|
IAM |
|
Integrazione |
|
Gestione Java |
|
Motore Kubernetes |
|
Load balancer |
|
Log Analytics per LogAnalyticsQueryJobWorkRequest |
|
Log Analytics per LogAnalyticsStorageWorkRequest |
|
Log Analytics per LogAnalyticsConfigWorkRequest |
|
Management Agent |
|
Firewall di rete |
|
Storage degli oggetti |
|
Oracle Cloud Bridge |
|
Oracle Cloud Migrations |
|
Hub di gestione del sistema operativo |
|
Automazione dei processi |
|
Coda |
|
Resource Manager |
|
Desktop sicuri |
|
Mesh di servizio |
|
Gestione WebLogic |
|
Filtro della risposta alla richiesta
A volte è necessario sapere quali risorse sono interessate da una determinata richiesta di lavoro asincrona. Nei casi in cui la risposta alla richiesta include solo una o due risorse interessate, il corpo della risposta alla richiesta è probabilmente sufficiente. Tuttavia, nei casi in cui una risposta a una richiesta influisce su molte risorse, è necessario filtrare la risposta per identificare le risorse a cui si è interessati.
L'applicazione di filtri alle risorse elencate in una risposta di richiesta di lavoro si basa su due attributi di tipo WorkRequestResource
: entityType
e actionType
.
- entityType: rappresenta il tipo di risorsa interessato dalla richiesta di lavoro. Questo è un attributo facoltativo, ma ogni risorsa può avere un solo
entityType
. - actionType: rappresenta l'impatto della risorsa specificata sull'operazione associata alla richiesta di lavoro. Ogni servizio specifica un elenco fisso di
actionType
valori consentiti (illustrati nelle sezioni seguenti).
Per ottenere informazioni sulle risorse su una richiesta di lavoro, chiamare il numero GetWorkRequest
e passare l'ID della richiesta di lavoro. La chiamata restituisce una risposta in formato JSON. Di seguito è riportato un esempio di chiamata a GetWorkRequest
nel servizio di storage degli oggetti.
{
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
}
Servizi diversi forniscono risposte leggermente diverse. Per i dettagli, consultare la documentazione di riferimento per l'API delle richieste di lavoro di ciascun servizio. I collegamenti a ciascuno sono disponibili nella sezione Per ulteriori informazioni.
Nella tabella seguente sono elencati i tipi di entità e i tipi di azione supportati dai servizi Oracle Cloud Infrastructure.
Nome servizio | Operation | entityType | actionType |
---|---|---|---|
Application Performance Monitoring | apm-domains |
|
|
Autonomous Recovery Service |
ChangeProtectionPolicyCompartment ChangeRecoveryServiceSubnetCompartment |
|
|
Piattaforma Blockchain | instance
|
|
|
Gruppi di posizionamento cluster |
|
|
|
Gestione dei contenuti | oceInstance |
|
|
Gestione database |
ChangeDbManagementPrivateEndpointCompartment CreateDbManagementPrivateEndpoint DeleteDbManagementPrivateEndpoint GetDbManagementPrivateEndpoint |
private-endpoints |
|
Migrazione del database |
|
|
|
Database OCI con PostgreSQL | |||
Catalogo dati | catalog
|
|
|
Integrazione dei dati | disworkspace
|
|
|
Etichettatura dati | datalabelingdataset |
|
|
Data science |
|
|
|
Settore DevOps |
|
|
|
Storage di file con Lustre |
|
|
|
Full Stack Disaster Recovery |
|
|
|
Globally Distributed Autonomous Database |
ChangeShardedDatabaseCompartment |
|
|
Globally Distributed Exadata Database on Exascale Infrastructure |
ChangeDistributedDatabaseCompartment ConfigureDistributedDatabaseSharding ChangeDistributedDatabasePrivateEndpointCompartment CreateDistributedDatabasePrivateEndpoint |
|
|
GoldenGate |
|
|
|
Integrazione |
Nota: |
instance |
|
Motore Kubernetes |
|
|
|
Load balancer | LoadBalancer
|
|
|
Management Agent | DeployPlugins | managementAgent |
|
Firewall di rete |
|
|
|
Storage degli oggetti | CopyObject | object
|
|
Oracle Cloud Bridge | ocbworkrequest |
|
|
Oracle Cloud Migrations |
ChangeReplicationScheduleCompartment |
ocmworkrequest |
|
Hub di gestione del 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 |
|
|
Automazione dei processi | instance |
|
|
Coda | |||
Resource Manager |
|
|
|
Desktop sicuri |
|
|
|
Mesh di servizio |
CreateVirtualServiceRouteTable UpdateVirtualServiceRouteTable DeleteVirtualServiceRouteTable CreateIngressGatewayRouteTable UpdateIngressGatewayRouteTable |
|
|
Gestione WebLogic |
|
|
Campione richiesta/risposta
Di seguito è riportata una sequenza di chiamate API REST per creare un cluster, che è un'operazione comune con tempi di esecuzione lunghi. Il chiamante recupera l'ID della richiesta di lavoro dalla risposta alla chiamata POST
iniziale e quindi esegue periodicamente il polling di WorkRequest
per determinare lo stato dell'operazione. La sequenza di richiesta/risposta riportata di seguito mostra questo flusso di lavoro:
- L'utente invia una chiamata all'API
CreateCluster
. - Il servizio risponde con il codice di stato 202, che indica che la richiesta è stata accettata e restituisce un ID della richiesta di lavoro nell'intestazione
opc-work-request-id
. - Successivamente, l'utente invia una chiamata
GET
sull'ID della richiesta di lavoro per ottenere lo stato della richiesta di lavoro. - Il servizio risponde con il codice di stato 200, indicando nel corpo della risposta che l'operazione
CLUSTER_CREATE
ha lo statoACCEPTED
. - Con il polling continuo, vediamo un'altra chiamata
GET
per la richiesta di lavoro. - Il servizio risponde con codice stato 200. Il corpo della risposta segnala che l'operazione
SUCCEEDED
.
Passo 1. Chiamata API iniziale per avviare un'operazione 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>"]}}
Passo 2. La risposta alla chiamata API iniziale, che contiene l'ID della richiesta di lavoro in Opc-Work-Request-Id header
.
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
Passo 3. Poiché si tratta di un'operazione con tempi di esecuzione lunghi, l'utente esegue periodicamente il polling della richiesta di lavoro utilizzando una chiamata GET
per determinarne lo stato.
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)
Passo 4. La chiamata GET
restituisce la risposta seguente, che indica nel corpo della risposta che l'operazione CLUSTER_CREATE
ha lo stato 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
}
Passo 5. L'operazione continua e l'utente continua a eseguire il polling della richiesta di lavoro utilizzando il metodo 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)
Passo 6. L'ultima chiamata GET
ha prodotto la risposta seguente, che indica che l'operazione è stata completata. Si noti che entityType
è "cluster" e che actionType
è "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"
}
Per ulteriori informazioni
- API della richiesta di lavoro di Application Performance Monitoring
- API della richiesta di lavoro di Autonomous Recovery Service
- API richiesta di lavoro Bastion
- Richieste di lavoro della piattaforma Blockchain
- API richiesta di lavoro di Cloud Advisor
- API richiesta di lavoro gruppi di posizionamento cluster
- API richiesta di lavoro di computazione
-
Hub connettore:
- API richiesta di lavoro istanze contenitore
- API richiesta di lavoro Content Management
-
Catalogo dati:
- API richiesta di lavoro integrazione dati
-
Etichettatura dati:
-
Data Science:
- API richiesta di lavoro database
- API richiesta di lavoro Gestione database
- API richiesta di lavoro migrazione del database
- API richiesta di lavoro Strumenti di database
- Database OCI con API richiesta di lavoro PostgreSQL
- API della richiesta di lavoro DevOps
- API richiesta di lavoro storage di file
- Storage di file con API richiesta di lavoro Lustre
- API richiesta di lavoro gestione applicazione flotta
- API richiesta di lavoro Full Stack Disaster Recovery
- API delle richieste di lavoro di Globally Distributed Autonomous Database
- Globally Distributed Exadata Database on Exascale Infrastructure Work Request API
- API della richiesta di lavoro GoldenGate
-
IAM:
- API richiesta di lavoro integrazione
- API richiesta di lavoro Java Management
- API richiesta di lavoro del motore Kubernetes
-
Load balancer:
- API richiesta di lavoro Log Analytics
- API richiesta di lavoro Management Agent
- API della richiesta di lavoro HeatWave
- API richiesta di lavoro firewall di rete
-
Storage degli oggetti:
- API della richiesta di lavoro del bridge Oracle Cloud
- API richiesta di lavoro Oracle Cloud Migrations
- API richiesta di lavoro hub di gestione del sistema operativo
- API richiesta di lavoro automazione processo
- API richiesta di lavoro coda
- API richiesta di lavoro Resource Manager
- API richiesta di lavoro Secure Desktops
- API richiesta di lavoro mesh servizio
- API richiesta di lavoro di monitoraggio dello stack
- API richiesta di lavoro Vision
- Visual Builder Studio: API WorkRequest
- API delle richieste di lavoro di analisi delle vulnerabilità
- WebLogic API della richiesta di lavoro di gestione