Saltearse al contenido

Conectar Pasos

A este punto, ya habrías seguido las guías Crear un Procesador y Crear un Paso. Nuestro siguiente objetivo es juntar esas dos piezas y conectar pasos dentro del procesador.

Ahora que has creado un paso, puedes conectarlo a otros pasos. Para hacer esto, usamos una clase builder llamada ProcessorBuilder para especificar una secuencia de pasos que componen un procesador.

  1. Después de que hayas instanciado tus pasos, necesitas convertirlos en RunnableStep. RunnableStep es un trait que envuelve alrededor de un paso. Proporciona los canales de entrada y salida necesarios que alimentan al paso y permite que el paso sea spawneado en una tarea. El SDK proporciona una función helper .into_runnable_step para convertir un paso en un RunnableStep.
  2. Configura tu primer paso con ProcessorBuilder::new_with_inputless_first_step. En casi todos los casos, el primer paso debería ser un TransactionStreamStep.
  3. Conecta el paso anterior al siguiente paso usando .connect_to. connect_to usa trait bounds para asegurar en tiempo de compilación que el tipo de salida del paso anterior coincide con el tipo de entrada del siguiente paso. Al llamar .connect_to, se crea un canal con tamaño channel_size y conecta los pasos anterior y siguiente. También spawnea una tarea que continuamente hace loop del paso anterior — leyendo datos de su canal de entrada, procesando los datos, y enviando la salida a su canal de salida.
  4. Repite el paso 3 para cada paso en tu procesador.
  5. Para cerrar el ProcessorBuilder, usa .end_and_return_output_receiver. Esto devuelve un InstrumentedAsyncReceiver que puedes usar para procesar la salida del último paso en el grafo.

Aquí hay un ejemplo simple de conectar dos pasos:

let (processor_builder, buffer_receiver) = ProcessorBuilder::new_with_inputless_first_step(
transaction_stream_step.into_runnable_step(),
)
.connect_to(extractor_step.into_runnable_step(), 10)
.end_and_return_output_receiver(10);

Aquí hay un ejemplo completo de aptos-indexer-processor-example.

Mientras conectas pasos, ProcessorBuilder en el fondo está construyendo una representación gráfica de los pasos en tu procesador usando petgraph. Puedes ver la representación visual del grafo llamando

let dot = processor_builder.graph.dot();
println!("{}", dot);

Esto producirá un grafo en el lenguaje DOT que puedes visualizar usando herramientas como Graphviz.