Sviluppa e distribuisci il Relay dell'evento
Crea un'applicazione Oracle Functions che utilizza eventi blockchain e li indirizza a Oracle Streaming Service.
L'applicazione di relay degli eventi richiede credenziali per la connessione al servizio di streaming. Le credenziali vengono conservate in Oracle Cloud Infrastructure Vault. Le credenziali vengono memorizzate nel vault quando si esegue il codice Terraform. Le credenziali vengono generate quando si esegue la configurazione iniziale dell'ambiente OCI.
La funzione fornisce i servizi seguenti:
- Recuperare le credenziali del servizio di streaming dal vault.
- Decifrare le credenziali (il Vault memorizza i valori cifrati).
- Decodifica dalla stringa con codifica base64.
- Utilizzare le credenziali decodificate per connettersi al servizio di streaming utilizzando l'API compatibile con Kafka.
- Creare e popolare un oggetto Java denominato event dal messaggio evento JSON.
- Utilizzare l'API Kafka per inviare il messaggio di evento.
Crea il Relay dell'evento
Puoi creare la relay in qualsiasi linguaggio di programmazione, ma perché le API Kafka sono documentate in Java, è meglio usare Java.
La classe EventProducer avrà i seguenti metodi:
@FnConfiguration
public void config(RuntimeContext ctx) { ... }
private String decryptData(String cipherText) { ... }
public String handleRequest(Event event) { ... }Nel file pom.xml sono necessarie anche le dipendenze seguenti:
<dependencies>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-keymanagement</artifactId>
<version>1.12.5</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>com.fnproject.fn</groupId>
<artifactId>api</artifactId>
<version>${fdk.version}</version>
</dependency>
.
.
.
Assicurarsi di disporre dello strumento CLI fn installato. Per ulteriori informazioni, vedere https://github.com/fnproject/fn#quickstart.
Build the Event Relay
Prima di poter eseguire il push di un'immagine, è necessario utilizzare il comando docker tag per creare una copia dell'immagine di origine locale come nuova immagine (la nuova immagine in realtà è solo un riferimento all'immagine di origine esistente). Come nome della nuova immagine, specificare il percorso completamente qualificato della posizione di destinazione in Oracle Cloud Infrastructure Registry, dove si desidera eseguire il push dell'immagine.
Per la tag sono necessarie le seguenti informazioni:
- Endpoint del registro Docker per la tua area geografica
- Lo spazio di nomi dello storage degli oggetti
Per ottenere l'endpoint per la propria area, cercare la propria area nella tabella in Disponibilità per area. Ad esempio, l'endpoint del registro per US East (Ashburn) è https://iad.ocir.io.
Per trovare lo spazio di nomi dello storage degli oggetti:
- Nel menu di navigazione, fare clic su Amministrazione, quindi su Dettagli tenancy.
- Lo spazio di nomi di storage degli oggetti si trova nella sezione Impostazioni di storage degli oggetti
Invia il resoconto dell'evento al registro
Dopo aver creato la relay di eventi e averla associata alla tag appropriata, puoi spostarla in Oracle Cloud Infrastructure Registry.
- Endpoint API per l'area, ad esempio
iad.ocir.io. È lo stesso valore utilizzato in precedenza per contrassegnare l'immagine Docker. - Spazio di nomi della tenancy: la stringa dello spazio di nomi dello storage degli oggetti generata automaticamente della tenancy (come mostrato nella pagina Informazioni sulla tenancy).
- Nome utente: il nome utente in Oracle Cloud Infrastructure.
- Token di autenticazione: il token creato in precedenza nella sezione Piano.
Creare una chiave API
Generare una coppia di chiavi e caricare la chiave pubblica nel profilo utente di Oracle Cloud Infrastructure.
Questa operazione può essere eseguita in due modi, ma in questa sezione verrà utilizzato Cloud Shell poiché è possibile caricare in modo sicuro la chiave generata direttamente nell'account.
Applicare la configurazione di Terraform
Scaricare la configurazione Terraform dal repository GitHub, aggiornare il file delle variabili Terraform, quindi applicare la configurazione.
terraform.tvars.
- Area: l'identificativo dell'area. È possibile estrarlo dall'URL della console di Oracle Cloud Infrastructure. Ad esempio, se l'URL è
https://console.us-ashburn-1.oraclecloud.com/compute/instances, l'identificativo area è us-ashburn-1. Se l'URL èhttps://cloud.oracle.com/compute/instances, è necessario cercare l'identificativo area in https://docs.oracle.com/iaas/Content/General/Concepts/regions.htm - OCID compartimento: l'OCID del compartimento che contiene le risorse per il progetto. Se hai seguito le istruzioni della sezione Plan, hai bisogno dell'OCID per il compartimento OBP_Events.
- Impronta: l'impronta digitale della chiave API pubblica generata e caricata nel profilo in precedenza.
- Chiave privata: il percorso completo e il nome file della chiave API privata generati in precedenza. Ad esempio,
/home/opc/oci_api_key.pem. Non utilizzare~nel percorso. - OCID utente: è possibile ottenerlo dalla pagina Dettagli utente. Aprire il menu della console, andare a Identità e fare clic su Utenti. Fare clic sul proprio nome utente nell'elenco.
- OCID tenancy: è possibile ottenerlo dalla pagina Dettagli tenancy. Aprire il menu della console, andare a Amministrazione e fare clic su Dettagli tenancy.
Una volta acquisite le informazioni, scaricare e applicare la configurazione Terraform.
Iscriviti a eventi blockchain
Registra un URL di callback in modo che API Gateway possa ricevere eventi di blockchain.
https://joh5rb...fuxy.apigateway.us-ashburn-1.oci.customer-oci.com/obpevents/callback. Inoltre, sarà necessario l'endpoint di distribuzione del gateway API, visualizzato come use_to_extract_ssl_certificate al termine del processo Terraform. Il formato è joh5rb...fuxy.apigateway.us-ashburn-1.oci.customer-oci.com:443Inoltre, hai bisogno dell'endpoint API REST di Oracle Blockchain Platform per effettuare la sottoscrizione agli eventi relativi al codice concatenato. Ha il seguente modulo:
https://<rest_server_url:port/restproxy#>/bcsgw/rest/v1/event/subscribe<rest_server_url:port/restproxy#> è l'URL per il proxy REST elencato nella console di Oracle Blockchain Platform. Nella console aprire la pagina Nodi e cercare il nodo proxy REST. Nella colonna Instradamento è elencato un URL che include la porta e un numero di proxy REST.
Per sottoscrivere eventi blockchain:
Creazione e test del consumer di eventi
Il consumer di eventi utilizza le API Kafka per autenticare e recuperare i messaggi di blockchain dal servizio di streaming di Oracle Cloud Infrastructure.
Per creare un consumatore, sono necessarie informazioni per le seguenti stringhe:
- USER-NAME: nome utente personale.
- AUTH-TOKEN: il token generato e copiato in precedenza.
- TENANCY-NAME: è possibile trovare questo valore nella pagina Dettagli tenancy della console OCI. Per aprire la pagina Dettagli tenancy, nel menu di navigazione della console selezionare Amministrazione, quindi fare clic su Dettagli tenancy.
- STREAM-POOL-OCID: l'OCID del pool di flussi creato durante l'esecuzione dello script Terraform. Per trovare questo valore, aprire il menu di navigazione della console, andare a Amministrazione e fare clic su Streaming. Selezionare il pool di flussi e nella pagina che apre la copia dell'OCID.
- REGION: "us-ashburn-1". La regione potrebbe essere diversa.
- EVENT-NAME: questo è lo stesso nome di evento utilizzato in precedenza quando hai registrato l'URL di callback per ricevere gli eventi blockchain.
Utilizzare l'esempio seguente per verificare e verificare che il sistema funzioni come previsto.
import java.util.Properties;
import java.util.Arrays;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.ConsumerRecord;
public class Consumer {
public static void main(String[] args) throws Exception {
Properties props = new Properties();
props.put("bootstrap.servers", "streaming.REGION.oci.oraclecloud.com:9092");
props.put("security.protocol", "SASL_SSL");
props.put("sasl.mechanism", "PLAIN");
props.put("sasl.jaas.config", "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"TENANCY-NAME/USER-NAME/STREAM-POOL-OCID\" password=\"AUTH-TOKEN\";");
props.put("group.id", "group-0");
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "1000");
props.put("session.timeout.ms", "30000");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
// Create a consumer and subscribe to it
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("EVENT-NAME"));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for (ConsumerRecord<String, String> record : records)
System.out.printf("offset = %d, key = %s, value = %s\n",
record.offset(), record.key(), record.value());
}
}
}Quando avvii il consumatore, consuma tutti gli eventi esistenti già inseriti nel flusso.
Dopo che l'esempio funziona e dimostra che la soluzione funziona, è possibile creare una o più applicazioni consumer a livello di produzione. Le applicazioni possono essere scritte in linguaggio JavaScript, Python o altro.