Bladeren bron

【框架搭建】整合RabbitMQ

yuanan 1 maand geleden
bovenliggende
commit
2f0687c2c3
6 gewijzigde bestanden met toevoegingen van 31 en 10 verwijderingen
  1. 1 0
      Cargo.lock
  2. 2 0
      Cargo.toml
  3. 2 0
      emu-config.yaml
  4. 14 8
      src/cmd/cmd.rs
  5. 2 0
      src/cmd/config.rs
  6. 10 2
      src/internal/utils/mq.rs

+ 1 - 0
Cargo.lock

@@ -495,6 +495,7 @@ dependencies = [
  "rand",
  "serde",
  "serde_yml",
+ "thiserror 2.0.11",
  "tklog",
  "tokio",
  "tokio-cron-scheduler",

+ 2 - 0
Cargo.toml

@@ -5,6 +5,8 @@ edition = "2021"
 
 [dependencies]
 # 错误处理
+thiserror = "2.0.11"
+# 错误处理
 anyhow = "1.0.95"
 # 命令行框架
 clap = { version = "4.5.28", features = ["derive"] }

+ 2 - 0
emu-config.yaml

@@ -8,3 +8,5 @@ emu:
 rabbitmq:
   host: '122.51.163.61'
   port: 5672
+  username: "guest"
+  password: "yuanan520."

+ 14 - 8
src/cmd/cmd.rs

@@ -13,17 +13,23 @@ struct Args {
 
 pub async fn cmd() {
     let args = Args::parse();
-    match init_config(args.config).await {
-        Ok(()) => {
-            let emu = Arc::new(ems::emu::emu::Emu::new().await);
-            let _ = emu.run().await;
-        }
-        Err(e) => {
-            eprintln!("配置加载失败: {}", e.to_string());
-        }
+    let result = init_system(args.config).await;
+    if let Err(e) = result {
+        eprintln!("系统初始化失败: {}", e.to_string());
+    } else {
+        let emu = Arc::new(ems::emu::emu::Emu::new().await);
+        let _ = emu.run().await;
     }
 }
 
+/// 初始化系统资源以及配置
+async fn init_system(config_path: String) -> anyhow::Result<()> {
+    init_config(config_path).await?;
+    // let rabbitmq = RabbitMQ::new().await?;
+    // MQ.get_or_init(|| rabbitmq);
+    Ok(())
+}
+
 /// 配置载入内存
 async fn init_config(config_path: String) -> anyhow::Result<()> {
     let content = read_to_string(config_path).await?;

+ 2 - 0
src/cmd/config.rs

@@ -32,4 +32,6 @@ pub struct BmsConfig {}
 pub struct RabbitMQConfig {
     pub host: String,
     pub port: u16,
+    pub username: String,
+    pub password: String,
 }

+ 10 - 2
src/internal/utils/mq.rs

@@ -1,6 +1,8 @@
 use crate::cmd::config::EMU_CONFIG;
 use amqprs::connection::{Connection, OpenConnectionArguments};
 use std::sync::OnceLock;
+
+/// RabbitMQ 单例
 pub static MQ: OnceLock<RabbitMQ> = OnceLock::new();
 
 pub struct RabbitMQ {
@@ -9,8 +11,14 @@ pub struct RabbitMQ {
 
 impl RabbitMQ {
     pub async fn new() -> Result<Self, anyhow::Error> {
-        let string = EMU_CONFIG.get().unwrap().rabbitmq.host.as_str();
-        let conn = Connection::open(&OpenConnectionArguments::new("", 0, "", "")).await?;
+        let config = &EMU_CONFIG.get().unwrap().rabbitmq;
+        let conn = Connection::open(&OpenConnectionArguments::new(
+            config.host.as_str(),
+            config.port,
+            config.username.as_str(),
+            config.password.as_str(),
+        ))
+        .await?;
         Ok(RabbitMQ { conn })
     }
 }