use std::{error::Error, time::Duration}; use moleculer::{ config::{ConfigBuilder, Transporter}, service::{Context, Event, EventBuilder, Service}, ServiceBroker, }; #[tokio::main] async fn main() -> eyre::Result<()> { env_logger::init(); color_eyre::install()?; let config = ConfigBuilder::default() .transporter(Transporter::nats("nats://localhost:4222")) .build(); let print_async = EventBuilder::new("printAsync") .add_callback(print_async) .build(); let print_normal = EventBuilder::new("printNormal") .add_callback(print_normal) .build(); let greeter_service = Service::new("asyncGreeter") .add_event(print_normal) .add_event(print_async); let service_broker = ServiceBroker::new(config).add_service(greeter_service); service_broker.start().await; Ok(()) } fn print_async(_ctx: Context) -> Result<(), Box> { println!("Starting"); tokio::spawn(async { hello_from_async().await }); println!("Ended"); Ok(()) } fn print_normal(_ctx: Context) -> Result<(), Box> { println!("Hello from normal"); Ok(()) } async fn hello_from_async() { tokio::time::sleep(Duration::from_secs(5)).await; println!("Hello from async") }