Skip to main content

nacos_lib/
register.rs

1use async_trait::async_trait;
2use serde::{Deserialize, Serialize};
3use to_url::ToUrl;
4use serde_json::Value;
5use crate::client::{CLIENT, REQ_CLIENT};
6use crate::parse_url::ParseUrl;
7use crate::result::Result;
8
9const REGISTER: &str = "/nacos/v1/ns/instance";
10
11/// 注册实例
12#[allow(non_snake_case)]
13#[derive(Debug, Default, Clone, Deserialize, Serialize, ToUrl)]
14pub struct Register {
15    /// 服务名
16    pub serviceName: String,
17    /// 服务实例IP
18    pub ip: String,
19    /// 服务实例port
20    pub port: String,
21    /// 命名空间ID
22    pub namespaceId: Option<String>,
23    /// 权重
24    pub weight: Option<f64>,
25    /// 是否上线
26    pub enabled: Option<bool>,
27    /// 是否健康
28    pub healthy: Option<bool>,
29    /// 扩展信息
30    pub metadata: Option<String>,
31    /// 集群名
32    pub clusterName: Option<String>,
33    /// 分组名
34    pub groupName: Option<String>,
35    /// 是否临时实例
36    pub ephemeral: Option<bool>,
37}
38
39#[async_trait]
40impl ParseUrl for Register{}
41
42impl Register {
43    pub async fn register(&self) -> Result<String> {
44        let url = self.parse_url(REGISTER).await;
45        let ok = REQ_CLIENT.post(url).send().await?.text().await?;
46        let read = CLIENT.read().await;
47        let ins = read.get_instance().get_instance().await?;
48        let beat = read.get_beat(&ins.instanceId);
49        beat.beat().await?;
50        Ok(ok)
51    }
52}