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 da API para os serviços do Oracle Cloud Infrastructure podem iniciar operações de longa execução que não concluem a solicitação do cliente antes de uma resposta ser 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 do Oracle Cloud Infrastructure, como Compute e Database, são compatíveis com solicitações de serviço usando a API de Solicitações de Serviço, que contém a operação GetWorkRequest
.
Alguns serviços oferecem solicitações de serviço compatíveis com a API de 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 |
|
Autonomous Recovery Service |
|
Big Data Service |
|
Blockchain Platform |
|
Serviço Compute |
|
Hub Conector |
|
Serviço Container Engine for Kubernetes |
|
Content Management |
|
Gerenciamento de Banco de Dados |
|
OCI Database com PostgreSQL |
|
Data Catalog |
|
Data Integration |
|
Data Labeling |
|
Data Science |
|
Serviço Database |
|
Database Migration |
|
DevOps |
|
Full Stack Disaster Recovery |
|
Autonomous Database Distribuído Globalmente |
|
GoldenGate |
|
Serviço IAM |
|
Integration |
|
Java Management |
|
Load Balancer |
|
Análise de Registro em Log para LogAnalyticsQueryJobWorkRequest |
|
Análise de Registro em Log para LogAnalyticsStorageWorkRequest |
|
Análise de Registro em Log para LogAnalyticsConfigWorkRequest |
|
Agente de Gerenciamento |
|
Network Firewall |
|
Serviço Object Storage |
|
Oracle Cloud Bridge |
|
Oracle Cloud Migrations |
|
Hub do Serviço OS Management |
|
Process Automation |
|
Queue |
|
Serviço Resource Manager |
|
Áreas de Trabalho Seguras |
|
Service Mesh |
|
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 chamada 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 a seguir lista os tipos de entidade e os tipos de ação suportados pelos serviços do Oracle Cloud Infrastructure.
Nome do Serviço | Operação | entityType | actionType |
---|---|---|---|
Application Performance Monitoring | apm-domains |
|
|
Autonomous Recovery Service |
ChangeProtectionPolicyCompartment ChangeRecoveryServiceSubnetCompartment |
|
|
Blockchain Platform | instance
|
|
|
Serviço Container Engine for Kubernetes |
|
|
|
Content Management | oceInstance |
|
|
Gerenciamento de Banco de Dados |
ChangeDbManagementPrivateEndpointCompartment CreateDbManagementPrivateEndpoint DeleteDbManagementPrivateEndpoint GetDbManagementPrivateEndpoint |
private-endpoints |
|
Database Migration |
|
|
|
OCI Database com PostgreSQL | |||
Data Catalog | catalog
|
|
|
Data Integration | disworkspace
|
|
|
Data Labeling | datalabelingdataset |
|
|
Data Science |
|
|
|
DevOps |
|
|
|
Full Stack Disaster Recovery |
|
|
|
Autonomous Database Distribuído Globalmente |
ChangeShardedDatabaseCompartment |
|
|
GoldenGate |
|
|
|
Integration |
Observação: |
instance |
|
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 |
|
Hub do Serviço OS Management |
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 Job Programado/RunScheduledJobNow SwitchModuleStreamOnManagedInstance UpdateAllPackagesOnManagedInstanceGroup UpdateAllPackagesOnManagedInstancesInCompartment |
|
|
Process Automation | instance |
|
|
Queue | |||
Serviço Resource Manager |
|
|
|
Áreas de Trabalho Seguras |
|
|
|
Service Mesh |
CreateVirtualServiceRouteTable UpdateVirtualServiceRouteTable DeleteVirtualServiceRouteTable CreateIngressGatewayRouteTable UpdateIngressGatewayRouteTable |
|
|
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
- API de solicitação de serviço do Application Performance Monitoring
- API de solicitação de serviço do Autonomous Recovery Service
- API de solicitação de serviço do Bastion
- Solicitações de serviço do Blockchain Platform
- API de solicitação de serviço do Cloud Advisor
- API de solicitação de serviço do Compute
-
Hub de Conectores:
- API de solicitação de serviço do Container Engine for Kubernetes
- API de solicitação de serviço do Container Instances
- API de solicitação de serviço do Content Management
-
Data Catalog:
- Data Catalog Solicitações de Serviço
- API de solicitação de serviço do Data Catalog
- API de solicitação de serviço do Data Integration
-
Data Labeling:
- Criação de Label de Dados Solicitações de Serviço
- API de solicitação de serviço do Data Labeling
-
Data Science:
- Criando Sessões de Notebook e Excluindo Projetos
- API de solicitação de serviço do Data Science
- API de solicitação de serviço do Database
- API de solicitação de serviço do Database Management
- API de solicitação de serviço do Database Migration
- API de solicitação de serviço do Database Tools
- API de solicitação de serviço do OCI Database com PostgreSQL
- API de solicitação de serviço do DevOps
- API de solicitação de serviço do Full Stack Disaster Recovery
- API de solicitação de serviço do Autonomous Database Distribuída Globalmente
- API de solicitação de serviço do GoldenGate
-
IAM:
- API de solicitação de serviço do IAM (Para excluir um compartimento)
- API TaggingWorkRequest (Conceitos de Tag e Namespace de Tag)
- API de solicitação de serviço do Integration
- API de solicitação de serviço do Java Management
-
Load Balancer:
- Solicitações de Serviço para o Load Balancer
- API de solicitação de serviço do Load Balancer
- API de solicitação de serviço do Logging Analytics
- API de solicitação de serviço do Management Agent
- API da solicitação de serviço MySQL Heatwave
- API de solicitação de serviço do Network Firewall
-
Object Storage:
- Solicitações de Serviço de Cópia de Objeto
- API de solicitação de serviço do Object Storage
- API de solicitação de serviço do Oracle Cloud Bridge
- API de solicitação de serviço do Oracle Cloud Migrations
- API da solicitação de serviço do OS Management Hub
- API de solicitação de serviço do Process Automation
- API de solicitação de serviço do Queue
- API de solicitação de serviço do Resource Manager
- API de solicitação de serviço do Secure Desktops
- API de solicitação de serviço do Service Mesh
- API de solicitação de serviço do Stack Monitoring
- API de solicitação de serviço do Vision
- Visual Builder Studio: API de Solicitação de Serviço
- API de solicitação de serviço do Vulnerability Scanning