rocketmq_protocol/protocol/header/namesrv/
broker_request.rs1use rocketmq_macros::RequestHeaderCodec;
16use std::fmt::Display;
17
18use cheetah_string::CheetahString;
19use serde::Deserialize;
20use serde::Serialize;
21
22pub const MAX_BROKER_HEARTBEAT_TIMEOUT_MILLIS: u64 = 24 * 60 * 60 * 1_000;
28
29#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodec)]
30#[serde(rename_all = "camelCase")]
31#[header(
32 type_id = "rocketmq_protocol::protocol::header::namesrv::broker_request::UnRegisterBrokerRequestHeader",
33 java_class = "org.apache.rocketmq.remoting.protocol.header.namesrv.UnRegisterBrokerRequestHeader"
34)]
35pub struct UnRegisterBrokerRequestHeader {
36 #[header(required)]
37 pub broker_name: CheetahString,
38
39 #[header(required)]
40 pub broker_addr: CheetahString,
41
42 #[header(required)]
43 pub cluster_name: CheetahString,
44
45 #[header(required, range = "i64")]
46 pub broker_id: u64,
47}
48
49impl UnRegisterBrokerRequestHeader {
50 pub fn new(
51 broker_name: impl Into<CheetahString>,
52 broker_addr: impl Into<CheetahString>,
53 cluster_name: impl Into<CheetahString>,
54 broker_id: u64,
55 ) -> Self {
56 Self {
57 broker_name: broker_name.into(),
58 broker_addr: broker_addr.into(),
59 cluster_name: cluster_name.into(),
60 broker_id,
61 }
62 }
63}
64
65impl Display for UnRegisterBrokerRequestHeader {
66 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
67 write!(
68 f,
69 "UnRegisterBrokerRequestHeader {{ brokerName: {}, brokerAddr: {}, clusterName: {}, brokerId: {} }}",
70 self.broker_name, self.broker_addr, self.cluster_name, self.broker_id
71 )
72 }
73}
74
75#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodec)]
76#[serde(rename_all = "camelCase")]
77#[header(
78 type_id = "rocketmq_protocol::protocol::header::namesrv::broker_request::BrokerHeartbeatRequestHeader",
79 java_class = "org.apache.rocketmq.remoting.protocol.header.namesrv.BrokerHeartbeatRequestHeader"
80)]
81pub struct BrokerHeartbeatRequestHeader {
82 #[header(required)]
83 pub cluster_name: CheetahString,
84
85 #[header(required)]
86 pub broker_addr: CheetahString,
87
88 #[header(required)]
89 pub broker_name: CheetahString,
90 pub broker_id: Option<i64>,
91 pub epoch: Option<i32>,
92 pub max_offset: Option<i64>,
93 pub confirm_offset: Option<i64>,
94 pub store_ready: Option<bool>,
96 pub heartbeat_timeout_mills: Option<i64>,
97 pub election_priority: Option<i32>,
98}
99
100#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodec)]
101#[serde(rename_all = "camelCase")]
102#[header(
103 type_id = "rocketmq_protocol::protocol::header::namesrv::broker_request::GetBrokerMemberGroupRequestHeader",
104 java_class = "org.apache.rocketmq.remoting.protocol.header.GetBrokerMemberGroupRequestHeader"
105)]
106pub struct GetBrokerMemberGroupRequestHeader {
107 #[header(required)]
108 pub cluster_name: CheetahString,
109 #[header(required)]
110 pub broker_name: CheetahString,
111}
112
113impl GetBrokerMemberGroupRequestHeader {
114 pub fn new(cluster_name: impl Into<CheetahString>, broker_name: impl Into<CheetahString>) -> Self {
115 Self {
116 cluster_name: cluster_name.into(),
117 broker_name: broker_name.into(),
118 }
119 }
120}
121
122#[cfg(test)]
123mod tests {
124 use super::*;
125
126 #[test]
127 fn unregister_broker_request_header_display() {
128 let header = UnRegisterBrokerRequestHeader::new("name", "addr", "cluster", 1);
129 let display = format!("{}", header);
130 let expected =
131 "UnRegisterBrokerRequestHeader { brokerName: name, brokerAddr: addr, clusterName: cluster, brokerId: 1 }";
132 assert_eq!(display, expected);
133 }
134
135 #[test]
136 fn get_broker_member_group_request_uses_java_wire_names() {
137 let header = GetBrokerMemberGroupRequestHeader::new("cluster-a", "broker-a");
138
139 assert_eq!(
140 serde_json::to_string(&header).unwrap(),
141 r#"{"clusterName":"cluster-a","brokerName":"broker-a"}"#
142 );
143 }
144}