Solicitações de Serviço Assíncronas
Este tópico descreve solicitações de serviço assíncronas para operações de longa execução em relação aos serviços do Oracle Cloud Infrastructure. Também são fornecidas orientações sobre como obter o status da solicitação e sobre como inspecionar a resposta da solicitação para permitir a filtragem dos recursos afetados.
Visão Geral
As chamadas de API para os serviços da Oracle Cloud Infrastructure podem iniciar operações de longa execução que não concluem a solicitação do cliente antes que uma resposta seja retornada. Nesses casos, o serviço gera uma solicitação de serviço assíncrona que permite a visibilidade do andamento de operações assíncronas e de longa execução. A resposta à chamada da API REST contém um ID de solicitação de serviço no cabeçalho opc-work-request-id
, que permite monitorar seu progresso e status. A própria solicitação de serviço permanece em uma fila até que a operação seja concluída.
Você pode monitorar o status da solicitação de serviço a qualquer momento, chamando GetWorkRequest
e especificando o ID da solicitação de serviço.
Alguns serviços da Oracle Cloud Infrastructure, como o Compute e o Database, suportam solicitações de trabalho usando a API de Solicitações de Trabalho, que contém a operação GetWorkRequest
.
Alguns serviços oferecem solicitações de trabalho suportadas pela API do serviço em vez da API de Solicitações de Serviço discutida neste tópico. Essas APIs de serviço incluem operações que funcionam de maneira semelhante à operação GetWorkRequest
usada pela API de Solicitações de Serviço.
Para obter detalhes, consulte a documentação de referência da API de solicitação de cada serviço. Os links para cada um são fornecidos na seção Para Obter Mais Informações.
Duas funcionalidades da resposta à solicitação são de interesse específico: o status da solicitação de serviço e uma lista dos recursos afetados pela solicitação de serviço. O status é importante porque as solicitações de serviço assíncronas devem saber quando uma operação foi concluída, ainda está em execução ou se falhou completamente.
Para recuperar informações sobre falhas ou erros da solicitação de serviço, cada serviço fornece APIs para extrair informações sobre erros e logs. Para obter links para a documentação de referência da API de cada um dos serviços, consulte a seção Para Obter Mais Informações.
Nos casos em que uma operação de solicitação de serviço afeta vários recursos, há uma lista dos recursos que a solicitação de serviço afeta, juntamente com os atributos entityType
e actionType
de cada uma deles.
Status da Solicitação de Serviço
As solicitações de serviço assíncronas permitem que você monitore seu andamento fornecendo um atributo de status no objeto WorkRequest
. Cada um dos serviços suportados fornece sua própria API para obter o status, conforme listado nas seções a seguir.
Há uma classe ContainerEngineWaiters que permite criar um callback usando o método
forWorkRequest
. Use essa API para encaminhar uma notificação quando o status de uma operação mudar; por exemplo, quando passar de IN_PROGRESS
para COMPLETED
.A tabela a seguir lista os atributos de status suportados pelo objeto WorkRequest
nos respectivos serviços.
Serviço | Atributos de Status |
---|---|
Application Performance Monitoring |
|
Serviço de Recuperação Autônoma |
|
Serviço de Big Data |
|
Blockchain Platform |
|
Grupos de Posicionamento de Clusters |
|
Serviço Compute |
|
Connector Hub |
|
Gerenciamento de Conteúdo |
|
Administração de Banco de Dados |
|
OCI Database with PostgreSQL |
|
Catálogo de Dados |
|
Integração de Dados |
|
Data Labeling |
|
Ciência de Dados |
|
Banco de Dados |
|
Database Migration |
|
DevOps |
|
Armazenamento de Arquivos |
|
Armazenamento de Arquivos com Lustre |
|
Fleet Application Management |
|
Full Stack Disaster Recovery |
|
Globally Distributed Autonomous Database |
|
Exadata Database on Exascale Infrastructure Distribuído Globalmente |
|
GoldenGate |
|
IAM |
|
Integration |
|
Java Management |
|
Kubernetes Engine |
|
Load Balancer |
|
Log Analytics para LogAnalyticsQueryJobWorkRequest |
|
Log Analytics para LogAnalyticsStorageWorkRequest |
|
Log Analytics para LogAnalyticsConfigWorkRequest |
|
Agente de Gerenciamento |
|
Network Firewall |
|
Serviço Object Storage |
|
Oracle Cloud Bridge |
|
Oracle Cloud Migrations |
|
OS Management Hub |
|
Process Automation |
|
Fila |
|
Gerenciador de Recursos |
|
Desktops Seguros |
|
Service Mesh |
|
WebLogic Management |
|
Filtrando a Resposta da Solicitação
Às vezes, você precisa saber quais recursos são afetados por determinada solicitação de serviço assíncrona. Nos casos em que a resposta da solicitação inclui apenas um ou dois recursos afetados, o corpo da resposta da solicitação provavelmente é suficiente. No entanto, nos casos em que uma resposta da solicitação afeta muitos recursos, você deve filtrar a resposta para identificar os recursos nos quais está interessado.
A filtragem de recursos listados em uma resposta de solicitação de serviço depende de dois atributos do tipo WorkRequestResource
: entityType
e actionType
.
- entityType: representa o tipo de recurso que a solicitação de serviço afeta. Esse é um atributo opcional, mas cada recurso pode ter somente um
entityType
. - actionType: representa como o recurso especificado é afetado pela operação associada à solicitação de serviço. Cada serviço especifica uma lista fixa de valores permitidos para
actionType
(mostrados nas seções a seguir).
Para obter informações sobre recurso em uma solicitação de serviço, chame GetWorkRequest
e especifique o ID da solicitação de serviço. A chamada retorna uma resposta no formato JSON. Veja a seguir um exemplo de como chamar GetWorkRequest
no serviço 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
}
Os diferentes serviços fornecem respostas um pouco diferentes. Para obter detalhes, consulte a documentação de referência da API de solicitação de cada serviço. Os links para cada um são fornecidos na seção Para Obter Mais Informações.
A tabela abaixo lista os tipos de entidade e os tipos de ação que são suportados pelos serviços Oracle Cloud Infrastructure.
Nome do Serviço | Operação | entityType | actionType |
---|---|---|---|
Application Performance Monitoring | apm-domains |
|
|
Serviço de Recuperação Autônoma |
ChangeProtectionPolicyCompartment ChangeRecoveryServiceSubnetCompartment |
|
|
Blockchain Platform | instance
|
|
|
Grupos de Posicionamento de Clusters |
|
|
|
Gerenciamento de Conteúdo | oceInstance |
|
|
Administração de Banco de Dados |
ChangeDbManagementPrivateEndpointCompartment CreateDbManagementPrivateEndpoint DeleteDbManagementPrivateEndpoint GetDbManagementPrivateEndpoint |
private-endpoints |
|
Database Migration |
|
|
|
OCI Database with PostgreSQL | |||
Catálogo de Dados | catalog
|
|
|
Integração de Dados | disworkspace
|
|
|
Data Labeling | datalabelingdataset |
|
|
Ciência de Dados |
|
|
|
DevOps |
|
|
|
Armazenamento de Arquivos com Lustre |
|
|
|
Full Stack Disaster Recovery |
|
|
|
Globally Distributed Autonomous Database |
ChangeShardedDatabaseCompartment |
|
|
Exadata Database on Exascale Infrastructure Distribuído Globalmente |
ChangeDistributedDatabaseCompartment ConfigureDistributedDatabaseSharding ChangeDistributedDatabasePrivateEndpointCompartment CreateDistributedDatabasePrivateEndpoint |
|
|
GoldenGate |
|
|
|
Integration |
Observação: |
instance |
|
Kubernetes Engine |
|
|
|
Load Balancer | LoadBalancer
|
|
|
Agente de Gerenciamento | DeployPlugins | managementAgent |
|
Network Firewall |
|
|
|
Serviço Object Storage | CopyObject | object
|
|
Oracle Cloud Bridge | ocbworkrequest |
|
|
Oracle Cloud Migrations |
ChangeReplicationScheduleCompartment |
ocmworkrequest |
|
OS Management Hub |
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 Trabalho Programado/RunScheduledJobNow SwitchModuleStreamOnManagedInstance UpdateAllPackagesOnManagedInstanceGroup UpdateAllPackagesOnManagedInstancesInCompartment |
|
|
Process Automation | instance |
|
|
Fila | |||
Gerenciador de Recursos |
|
|
|
Desktops Seguros |
|
|
|
Service Mesh |
CreateVirtualServiceRouteTable UpdateVirtualServiceRouteTable DeleteVirtualServiceRouteTable CreateIngressGatewayRouteTable UpdateIngressGatewayRouteTable |
|
|
WebLogic Management |
|
|
Exemplo de Solicitação/Resposta
Veja a seguir uma sequência de chamadas da API REST para criar um cluster, que é uma operação de longa execução comum. O chamador recupera o ID da solicitação de serviço da resposta para a chamada inicial POST
e, em seguida, periodicamente, sonda a WorkRequest
para determinar o status da operação. A sequência de solicitação/resposta a seguir ilustra esse workflow:
- O usuário emite uma chamada da API
CreateCluster
. - O serviço responde com o código de status 202, indicando que a solicitação foi aceita, e retorna um ID de solicitação de serviço no cabeçalho
opc-work-request-id
. - Em seguida, o usuário emite uma chamada
GET
no ID da solicitação de serviço para obter o status da solicitação de serviço. - O serviço responde com o código de status 200, indicando no corpo da resposta que a operação
CLUSTER_CREATE
tem o statusACCEPTED
. - Com sondagem contínua, vemos outra chamada
GET
para a solicitação de serviço. - O serviço responde com o código de status 200. O corpo da resposta informa que o status da operação é
SUCCEEDED
.
Etapa 1. Chamada de API inicial para iniciar uma operação 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>"]}}
Etapa 2. A resposta à chamada de API inicial, que contém o ID da solicitação de serviço em 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
Etapa 3. Como esta é uma operação de longa execução, o usuário periodicamente sonda a solicitação de serviço usando uma chamada GET
para determinar seu status.
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)
Etapa 4. A chamada GET
retorna a resposta a seguir, que indica no corpo da resposta que a operação CLUSTER_CREATE
tem um status 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
}
Etapa 5. A operação continua, e o usuário prossegue sondando a solicitação de serviço usando o 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)
Etapa 6. A última chamada GET
produziu a resposta a seguir, indicando que a operação foi concluída. Observe que entityType
é "cluster", e o actionType
tem o status "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 Obter Mais Informações
- Application Performance Monitoring - API da solicitação de serviço
- API da solicitação de trabalho do Autonomous Recovery Service
- API de solicitação de serviço do Bastion
- Solicitações de serviço da Blockchain Platform
- API da solicitação de serviço do Cloud Advisor
- API de solicitação de serviço dos Grupos de Posicionamento do Cluster
- API da solicitação de serviço de computação
-
Connector Hub:
- API da Solicitação de Serviço do Container Instances
- API da solicitação de serviço do Gerenciamento de Conteúdo
-
Serviço Data Catalog:
- API da solicitação de serviço do Data Integration
-
Criação de Label de Dados:
-
Ciência de Dados:
- API da solicitação de serviço do banco de dados
- API da Solicitação de Serviço do Database Management
- API de solicitação de serviço do serviço Database Migration
- API de solicitação de serviço do Database Tools
- API de solicitação de serviço do OCI Database with PostgreSQL
- DevOps API de solicitação de serviço
- API da solicitação de serviço do serviço File Storage
- File Storage com API de solicitação de serviço Lustre
- API de solicitação de serviço do Fleet Application Management
- API da solicitação de serviço do Full Stack Disaster Recovery
- API de solicitação de serviço do Globally Distributed Autonomous Database
- API de Solicitação de Serviço do Exadata Database Globalmente Distribuído na Infraestrutura do Exascale
- GoldenGate API de solicitação de serviço
-
IAM:
- API da solicitação de serviço de integração
- API da solicitação de serviço do Gerenciamento Java
- API de solicitação de serviço do Kubernetes Engine
-
Balanceador de Carga:
- API da solicitação de serviço Log Analytics
- API da solicitação de serviço do Management Agent
- API de solicitação de serviço HeatWave
- API da solicitação de serviço do serviço Network Firewall
-
Armazenamento de Objetos:
- API de solicitação de serviço da Oracle Cloud Bridge
- API de solicitação de serviço do Oracle Cloud Migrations
- API de solicitação de serviço do OS Management Hub
- API da solicitação de serviço da Automação do Processo
- API da solicitação de serviço da fila
- API da solicitação de serviço do Resource Manager
- API de solicitação de serviço do Secure Desktops
- API da solicitação de serviço da Malha de Serviços
- API da solicitação de serviço do Stack Monitoring
- API da solicitação de serviço da Vision
- Visual Builder Studio: WorkRequest API
- API de solicitação de serviço de Verificação de Vulnerabilidade
- WebLogic API da Solicitação de Serviço de Gerenciamento