Skip to content
Clone

feat(runtime): introduce QueueRuntime for managing RocketMQ client lifecycle and runtime configuration

ZhenYi committed
parent 0e5ba18 commit 81224d4 Browse files

28 files changed

+471 −375

File tree 28
Modified app/src/event.rs View app/src/event.rs
@@ -23,6 +23,14 @@
2323
2424 let cfg = EventConfig::load().context("loading event configuration")?;
2525
26 let mq_runtime = match mode {
27 EventMode::Actor => None,
28 EventMode::Single | EventMode::Consumer => Some(
29 queue::QueueRuntime::connect("event")
30 .map_err(|error| anyhow!("creating the rocketmq runtime: {error}"))?,
31 ),
32 };
33
2634 let platform = PlatformClient::new(&cfg.platform).map_err(|error| anyhow!("{error}"))?;
2735 let conn = cache::CacheConn::init(&cfg.redis)
2836 .await
@@ -136,20 +144,32 @@
136144 &cfg.socket.listen_address,
137145 shutdown_rx.clone(),
138146 );
139 let consumer_future = socket_runtime::run_consumer(
140 &cfg.consumer,
141 host.clone(),
142 platform.clone(),
143 subscriptions.clone(),
144 shutdown_rx.clone(),
145 );
147 let consumer_future = async {
148 match mq_runtime.as_ref() {
149 Some(runtime) => {
150 socket_runtime::run_consumer(
151 &cfg.consumer,
152 runtime,
153 host.clone(),
154 platform.clone(),
155 subscriptions.clone(),
156 shutdown_rx.clone(),
157 )
158 .await
159 }
160 None => std::future::pending().await,
161 }
162 };
146163
147164 let result = match mode {
148165 EventMode::Single => {
149166 let (socket_result, consumer_result) = tokio::join!(socket_future, consumer_future);
150167 socket_result.and(consumer_result)
151168 }
152 EventMode::Actor => socket_future.await,
169 EventMode::Actor => {
170 drop(consumer_future);
171 socket_future.await
172 }
153173 EventMode::Consumer => consumer_future.await,
154174 };
155175
@@ -157,6 +177,9 @@
157177 signal_task.abort();
158178 let _ = rpc_task.await;
159179 host.shutdown().await;
180 if let Some(runtime) = mq_runtime {
181 runtime.shutdown().await;
182 }
160183 tokio::time::sleep(Duration::from_millis(10)).await;
161184 result.map_err(|error| anyhow!("event system failed: {error}"))
162185}
Modified app/src/main.rs View app/src/main.rs
@@ -59,7 +59,9 @@
5959 let addr: SocketAddr = format!("{bind_addr}:{port}")
6060 .parse()
6161 .with_context(|| format!("parsing bind address {bind_addr}:{port}"))?;
62 let conn = queue::RocketMqConn::init(&cfg.rocketmq)
62 let mq_runtime = queue::QueueRuntime::connect("serve")
63 .map_err(|err| anyhow::anyhow!("failed to create the rocketmq runtime: {err}"))?;
64 let conn = queue::RocketMqConn::init(&cfg.rocketmq, &mq_runtime)
6365 .await
6466 .map_err(|err| anyhow::anyhow!("failed to start the rocketmq producer: {err}"))?;
6567
@@ -216,6 +218,7 @@
216218 }
217219 drain_workers(&mut workers, &cancel).await;
218220 conn.shutdown().await;
221 mq_runtime.shutdown().await;
219222 api_result?;
220223
221224 if relay_failed {
@@ -247,7 +250,9 @@
247250 smtp.is_valid().map_err(anyhow::Error::msg)?;
248251 email.is_valid().map_err(anyhow::Error::msg)?;
249252
250 let conn = queue::RocketMqConn::init(&rocketmq)
253 let mq_runtime = queue::QueueRuntime::connect("mail")
254 .map_err(|err| anyhow!("failed to create the rocketmq runtime: {err}"))?;
255 let conn = queue::RocketMqConn::init(&rocketmq, &mq_runtime)
251256 .await
252257 .map_err(|err| anyhow!("failed to start the rocketmq producer: {err}"))?;
253258 let events = auth::events::EventHandler::new(conn.clone());
@@ -256,7 +261,7 @@
256261
257262 let cancel = CancellationToken::new();
258263 let run_cancel = cancel.clone();
259 let run = consumer.run(rocketmq, run_cancel);
264 let run = consumer.run(rocketmq, &mq_runtime, run_cancel);
260265 let shutdown = oltp::shutdown::install();
261266 let signal = async {
262267 tokio::select! {
@@ -266,6 +271,7 @@
266271 };
267272 let (result, ()) = tokio::join!(run, signal);
268273 conn.shutdown().await;
274 mq_runtime.shutdown().await;
269275 result.context("mail service failed")
270276}
271277
Modified lib/infra/queue/src/conn.rs View lib/infra/queue/src/conn.rs
@@ -1,11 +1,9 @@
1use std::sync::Arc;
2
31use config::rocketmq::RocketMqConfig;
4use rocketmq_client_rust::producer::default_mq_producer::DefaultMQProducer;
5use rocketmq_common::common::message::message_single::Message;
6use tokio::sync::Mutex;
2use rocketmq_client_rust::DefaultMQProducer;
3use rocketmq_model::common::message::message_single::Message;
74
85use crate::error::{QueueError, QueueResult};
6use crate::runtime::QueueRuntime;
97
108pub const DEFAULT_MAX_MESSAGE_BYTES: usize = 4 * 1024 * 1024;
119/// 事件信封的字节预算:为消息属性与协议头预留 4 KiB。
@@ -13,7 +11,7 @@
1311
1412#[derive(Clone)]
1513pub struct RocketMqConn {
16 producer: Arc<dyn Producer>,
14 producer: DefaultMQProducer,
1715 config: RocketMqConfig,
1816}
1917
@@ -29,7 +27,7 @@
2927}
3028
3129impl RocketMqConn {
32 pub async fn init(config: &RocketMqConfig) -> QueueResult<Self> {
30 pub async fn init(config: &RocketMqConfig, runtime: &QueueRuntime) -> QueueResult<Self> {
3331 config.validate().map_err(QueueError::config)?;
3432 if config.max_message_bytes < MAX_ENVELOPE_BYTES {
3533 return Err(QueueError::config(format!(
@@ -39,7 +37,7 @@
3937 }
4038 probe_nameservers(config).await?;
4139
42 let mut producer = DefaultMQProducer::builder()
40 let mut producer = DefaultMQProducer::builder(runtime.client())
4341 .producer_group(config.producer_group.clone())
4442 .name_server_addr(config.name_server.replace(',', ";"))
4543 .build();
@@ -48,7 +46,7 @@
4846 })?;
4947
5048 Ok(Self {
51 producer: Arc::new(RocketProducer(Mutex::new(producer))),
49 producer,
5250 config: config.clone(),
5351 })
5452 }
@@ -62,35 +60,9 @@
6260 }
6361
6462 pub async fn send(&self, topic: &str, message: Message) -> QueueResult<()> {
65 self.producer
66 .send(topic, message, self.config.send_timeout_ms)
67 .await
68 }
69
70 pub async fn health(&self, topic: &str) -> QueueResult<()> {
71 self.producer.health(topic).await
72 }
73
74 pub async fn shutdown(&self) {
75 self.producer.shutdown().await;
76 }
77}
78
79#[async_trait::async_trait]
80trait Producer: Send + Sync {
81 async fn send(&self, topic: &str, message: Message, timeout_ms: u64) -> QueueResult<()>;
82 async fn health(&self, topic: &str) -> QueueResult<()>;
83 async fn shutdown(&self);
84}
85
86struct RocketProducer(Mutex<DefaultMQProducer>);
87
88#[async_trait::async_trait]
89impl Producer for RocketProducer {
90 async fn send(&self, topic: &str, message: Message, timeout_ms: u64) -> QueueResult<()> {
91 let mut producer = self.0.lock().await;
92 let result = producer
93 .send_with_timeout(message, timeout_ms)
63 let result = self
64 .producer
65 .send_with_timeout(message, self.config.send_timeout_ms)
9466 .await
9567 .map_err(|error| {
9668 QueueError::publish(format!("failed to publish to `{topic}`: {error}"))
@@ -103,21 +75,9 @@
10375 Ok(())
10476 }
10577
106 async fn health(&self, topic: &str) -> QueueResult<()> {
107 let mut producer = self.0.lock().await;
108 producer
109 .fetch_publish_message_queues(topic)
110 .await
111 .map(|_| ())
112 .map_err(|error| {
113 QueueError::connect(format!(
114 "rocketmq route lookup for `{topic}` failed: {error}"
115 ))
116 })
117 }
118
119 async fn shutdown(&self) {
120 self.0.lock().await.shutdown().await;
78 pub async fn shutdown(&self) {
79 let mut producer = self.producer.clone();
80 producer.shutdown().await;
12181 }
12282}
12383
Modified lib/infra/queue/src/consumer.rs View lib/infra/queue/src/consumer.rs
@@ -1,13 +1,12 @@
11use std::sync::Arc;
22
3use rocketmq_client_rust::consumer::default_mq_push_consumer::DefaultMQPushConsumer;
4use rocketmq_client_rust::consumer::listener::{
5 ConsumeConcurrentlyContext, ConsumeConcurrentlyStatus,
3use rocketmq_client_rust::{
4 ConsumeConcurrentlyContext, ConsumeConcurrentlyStatus, DefaultMQPushConsumer, MQPushConsumer,
65};
7use rocketmq_client_rust::consumer::mq_push_consumer::MQPushConsumer;
8use rocketmq_common::common::message::message_ext::MessageExt;
6use rocketmq_model::common::message::message_ext::MessageExt;
97
108use crate::error::{QueueError, QueueResult};
9use crate::runtime::QueueRuntime;
1110
1211pub type MessageHandler = Arc<dyn Fn(&[&MessageExt]) -> bool + Send + Sync>;
1312
@@ -26,7 +25,11 @@
2625}
2726
2827impl Consumer {
29 pub async fn start(config: ConsumerConfig, handler: MessageHandler) -> QueueResult<Self> {
28 pub async fn start(
29 config: ConsumerConfig,
30 runtime: &QueueRuntime,
31 handler: MessageHandler,
32 ) -> QueueResult<Self> {
3033 if config.name_server.trim().is_empty() {
3134 return Err(QueueError::config("rocketmq.name_server must not be blank"));
3235 }
@@ -36,7 +39,7 @@
3639 if config.topic.trim().is_empty() {
3740 return Err(QueueError::config("consumer topic must not be blank"));
3841 }
39 let mut consumer = DefaultMQPushConsumer::builder()
42 let mut consumer = DefaultMQPushConsumer::builder(runtime.client())
4043 .consumer_group(config.consumer_group)
4144 .name_server_addr(config.name_server.replace(',', ";"))
4245 .consume_thread_min(config.workers.max(1))
Modified lib/infra/queue/src/lib.rs View lib/infra/queue/src/lib.rs
@@ -5,6 +5,7 @@
55pub mod envelope;
66pub mod error;
77pub mod publisher;
8pub mod runtime;
89pub mod subject;
910
1011pub use conn::{
@@ -14,3 +15,4 @@
1415pub use envelope::{DeliveryClass, EVENT_PREFIX, Envelope, Labels, SCHEMA_VERSION};
1516pub use error::{QueueError, QueueResult};
1617pub use publisher::Publisher;
18pub use runtime::QueueRuntime;
Modified lib/infra/queue/src/publisher.rs View lib/infra/queue/src/publisher.rs
@@ -1,5 +1,5 @@
11use bytes::Bytes;
2use rocketmq_common::common::message::message_single::Message;
2use rocketmq_model::common::message::message_single::Message;
33
44use crate::conn::RocketMqConn;
55use crate::error::{QueueError, QueueResult};
Added lib/infra/queue/src/runtime.rs View lib/infra/queue/src/runtime.rs
@@ -0,0 +1,58 @@
1use std::sync::Arc;
2
3use rocketmq_client_rust::{ClientRuntime, ClientRuntimeConfig};
4use rocketmq_observability::TelemetryRuntimeGuard;
5use rocketmq_runtime::{RuntimeConfig, RuntimeOwner};
6
7use crate::error::{QueueError, QueueResult};
8
9pub struct QueueRuntime {
10 owner: RuntimeOwner,
11 client: Arc<ClientRuntime>,
12 _telemetry: TelemetryRuntimeGuard,
13}
14
15impl QueueRuntime {
16 pub fn connect(scope: &str) -> QueueResult<Self> {
17 let owner = RuntimeOwner::plan(RuntimeConfig {
18 thread_name: format!("rocketmq-{scope}"),
19 ..RuntimeConfig::default()
20 })
21 .map_err(|error| QueueError::config(format!("invalid rocketmq runtime config: {error}")))?
22 .build()
23 .map_err(|error| QueueError::connect(format!("creating the rocketmq runtime: {error}")))?;
24 let telemetry = TelemetryRuntimeGuard::noop();
25 let client = ClientRuntime::try_new(
26 owner.root_context().component("client"),
27 ClientRuntimeConfig::default(),
28 telemetry.handle(),
29 )
30 .map_err(|error| {
31 QueueError::connect(format!("creating the rocketmq client runtime: {error}"))
32 })?;
33 Ok(Self {
34 owner,
35 client,
36 _telemetry: telemetry,
37 })
38 }
39
40 pub fn client(&self) -> Arc<ClientRuntime> {
41 Arc::clone(&self.client)
42 }
43
44 pub async fn shutdown(self) {
45 let report = self.client.shutdown().await;
46 if !report.is_healthy() {
47 tracing::warn!(report = %report.to_json(), "rocketmq client runtime shut down uncleanly");
48 }
49 let report = self.owner.shutdown_tasks().await;
50 if !report.is_healthy() {
51 tracing::warn!(report = %report.to_json(), "rocketmq runtime tasks shut down uncleanly");
52 }
53 let report = self.owner.shutdown_background();
54 if !report.is_healthy() {
55 tracing::warn!(report = %report.to_json(), "rocketmq runtime did not shut down cleanly");
56 }
57 }
58}
Modified lib/infra/queue/Cargo.toml View lib/infra/queue/Cargo.toml
@@ -5,7 +5,6 @@
55
66[dependencies]
77config = { workspace = true }
8async-trait = { workspace = true }
98chrono = { version = "0.4.45", features = ["serde"] }
109serde = { workspace = true, features = ["derive"] }
1110serde_json = { workspace = true }
@@ -14,4 +13,6 @@
1413tokio = { workspace = true, features = ["time", "sync", "rt", "net"] }
1514tracing = { workspace = true }
1615rocketmq-client-rust = { workspace = true }
17rocketmq-common = { workspace = true }
16rocketmq-model = { workspace = true }
17rocketmq-observability = { workspace = true }
18rocketmq-runtime = { workspace = true }
Modified lib/service/auth/Cargo.toml View lib/service/auth/Cargo.toml
@@ -73,8 +73,6 @@
7373rand_core = { version = "0.6.4", features = ["getrandom"] }
7474reqwest = { version = "0.13.5", features = ["json", "stream", "form"] }
7575rsa = { version = "0.9.10", features = ["sha2", "getrandom"] }
76rocketmq-client-rust = "0.9.0"
77rocketmq-common = "0.9.0"
7876sea-orm = { version = "2.0.4", default-features = false, features = [
7977 "macros",
8078 "with-chrono",
Modified lib/service/chat/src/lib.rs View lib/service/chat/src/lib.rs
@@ -1,3 +1,5 @@
1#![recursion_limit = "512"]
2
13pub mod errors;
24pub mod handlers;
35pub mod openapi;
Modified lib/service/issues/src/lib.rs View lib/service/issues/src/lib.rs
@@ -1,3 +1,5 @@
1#![recursion_limit = "512"]
2
13pub mod errors;
24pub mod handlers;
35pub mod openapi;
Modified lib/service/pulls/src/lib.rs View lib/service/pulls/src/lib.rs
@@ -1,3 +1,5 @@
1#![recursion_limit = "512"]
2
13pub mod errors;
24pub mod handlers;
35pub mod openapi;
Modified lib/share/email/src/consumer.rs View lib/share/email/src/consumer.rs
@@ -5,7 +5,7 @@
55use config::smtp::SmtpConfig;
66use events::{EventHandler, Labels, label};
77use lettre::message::Mailbox;
8use queue::{Consumer, ConsumerConfig, MessageHandler};
8use queue::{Consumer, ConsumerConfig, MessageHandler, QueueRuntime};
99use serde::Serialize;
1010use tokio_util::sync::CancellationToken;
1111use tracing::{Instrument, info, warn};
@@ -82,6 +82,7 @@
8282 pub async fn run(
8383 self,
8484 rocketmq: RocketMqConfig,
85 runtime: &QueueRuntime,
8586 cancel: CancellationToken,
8687 ) -> Result<(), EmailError> {
8788 let topic = self.pool.mail_topic.clone();
@@ -136,6 +137,7 @@
136137 workers,
137138 max_reconsume,
138139 },
140 runtime,
139141 handler,
140142 )
141143 .await
Modified lib/share/email/src/lib.rs View lib/share/email/src/lib.rs
@@ -1,3 +1,5 @@
1#![recursion_limit = "512"]
2
13pub mod consumer;
24pub mod error;
35pub mod events;
Modified lib/share/events/src/gateway/action/common.rs View lib/share/events/src/gateway/action/common.rs
@@ -1,6 +1,6 @@
11use futures_util::TryStreamExt;
2use rocketmq_common::common::message::MessageTrait;
3use rocketmq_common::common::message::message_ext::MessageExt;
2use rocketmq_model::common::message::MessageTrait;
3use rocketmq_model::common::message::message_ext::MessageExt;
44use serde_json::Value;
55
66use super::{EventProperties, gitdata, kenshell, platform_events};
Modified lib/share/events/src/gateway/action/gitdata.rs View lib/share/events/src/gateway/action/gitdata.rs
@@ -1,4 +1,4 @@
1use rocketmq_common::common::message::message_ext::MessageExt;
1use rocketmq_model::common::message::message_ext::MessageExt;
22
33use super::EventProperties;
44use super::common::{EventContext, deliver_to_subscribers, unimplemented};
Modified lib/share/events/src/gateway/action/kenshell.rs View lib/share/events/src/gateway/action/kenshell.rs
@@ -1,4 +1,4 @@
1use rocketmq_common::common::message::message_ext::MessageExt;
1use rocketmq_model::common::message::message_ext::MessageExt;
22
33use super::EventProperties;
44use super::common::{EventContext, deliver_to_subscribers, unimplemented};
Modified lib/share/events/src/gateway/action/platform_events.rs View lib/share/events/src/gateway/action/platform_events.rs
@@ -1,5 +1,5 @@
11use futures_util::TryStreamExt;
2use rocketmq_common::common::message::message_ext::MessageExt;
2use rocketmq_model::common::message::message_ext::MessageExt;
33
44use super::EventProperties;
55use super::common::{EventContext, body, payload, retry, unimplemented, user_id};
Modified lib/share/events/src/gateway/action/properties.rs View lib/share/events/src/gateway/action/properties.rs
@@ -1,4 +1,4 @@
1use rocketmq_common::common::message::message_ext::MessageExt;
1use rocketmq_model::common::message::message_ext::MessageExt;
22use serde::{Deserialize, Serialize};
33
44#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
Modified lib/share/events/src/gateway/listener.rs View lib/share/events/src/gateway/listener.rs
@@ -1,8 +1,7 @@
1use rocketmq_client_rust::consumer::listener::consume_orderly_context::ConsumeOrderlyContext;
2use rocketmq_client_rust::consumer::listener::consume_orderly_status::ConsumeOrderlyStatus;
3use rocketmq_client_rust::consumer::listener::message_listener_orderly::MessageListenerOrderly;
4use rocketmq_common::RocketMQResult;
5use rocketmq_common::common::message::message_ext::MessageExt;
1use rocketmq_client_rust::{
2 ClientResult, ConsumeOrderlyContext, ConsumeOrderlyStatus, MessageListenerOrderly,
3};
4use rocketmq_model::common::message::message_ext::MessageExt;
65use std::sync::mpsc::{SyncSender, sync_channel};
76use std::time::{Duration, Instant};
87use tokio::sync::mpsc;
@@ -28,7 +27,7 @@
2827 &self,
2928 msgs: &[&MessageExt],
3029 _context: &mut ConsumeOrderlyContext,
31 ) -> RocketMQResult<ConsumeOrderlyStatus> {
30 ) -> ClientResult<ConsumeOrderlyStatus> {
3231 let deadline = Instant::now() + self.timeout;
3332 for message in msgs {
3433 let (completion, result) = sync_channel(1);
Modified lib/share/events/src/gateway/pipe.rs View lib/share/events/src/gateway/pipe.rs
@@ -1,7 +1,5 @@
1use rocketmq_client_rust::consumer::default_mq_push_consumer::DefaultMQPushConsumer;
2use rocketmq_client_rust::consumer::mq_push_consumer::MQPushConsumer;
3use rocketmq_common::RocketMQResult;
4use rocketmq_common::common::message::message_ext::MessageExt;
1use rocketmq_client_rust::{ClientResult, DefaultMQPushConsumer, MQPushConsumer};
2use rocketmq_model::common::message::message_ext::MessageExt;
53use std::collections::{HashMap, VecDeque};
64use std::sync::mpsc::SyncSender;
75use std::time::Duration;
@@ -25,13 +23,16 @@
2523}
2624
2725impl EventsPipe {
28 pub fn new(config: &RocketMqConsumerConfig) -> Result<Self, String> {
26 pub fn new(
27 config: &RocketMqConsumerConfig,
28 runtime: &queue::QueueRuntime,
29 ) -> Result<Self, String> {
2930 config.validate()?;
3031
3132 let (events_tx, events_rx) = mpsc::channel(QUEUE_CAPACITY);
3233 let (result_tx, result_rx) = mpsc::channel(QUEUE_CAPACITY);
3334
34 let mut consumer = DefaultMQPushConsumer::builder()
35 let mut consumer = DefaultMQPushConsumer::builder(runtime.client())
3536 .consumer_group(config.consumer_group.clone())
3637 .name_server_addr(config.name_servers().join(";"))
3738 .consume_timeout(config.consume_timeout_minutes())
@@ -72,7 +73,7 @@
7273 self.result_rx.recv().await
7374 }
7475
75 pub async fn apply_result(&mut self, result: ConsumeResult) -> RocketMQResult<()> {
76 pub async fn apply_result(&mut self, result: ConsumeResult) -> ClientResult<()> {
7677 let (message, success) = match result {
7778 ConsumeResult::Ack { message } => (message, true),
7879 ConsumeResult::Retry { message, .. } => (message, false),
@@ -89,11 +90,11 @@
8990 Ok(())
9091 }
9192
92 pub async fn subscribe(&mut self, topic: &str, expression: &str) -> RocketMQResult<()> {
93 pub async fn subscribe(&mut self, topic: &str, expression: &str) -> ClientResult<()> {
9394 self.consumer.subscribe(topic, expression).await
9495 }
9596
96 pub async fn subscribe_all(&mut self) -> RocketMQResult<()> {
97 pub async fn subscribe_all(&mut self) -> ClientResult<()> {
9798 for (topic, expression) in plan::plan(&self.prefixes) {
9899 self.consumer.subscribe(topic, expression).await?;
99100 }
@@ -101,7 +102,7 @@
101102 Ok(())
102103 }
103104
104 pub async fn start(&mut self) -> RocketMQResult<()> {
105 pub async fn start(&mut self) -> ClientResult<()> {
105106 self.consumer.start().await
106107 }
107108
Modified lib/share/events/src/gateway/result.rs View lib/share/events/src/gateway/result.rs
@@ -1,4 +1,4 @@
1use rocketmq_common::common::message::message_ext::MessageExt;
1use rocketmq_model::common::message::message_ext::MessageExt;
22
33pub enum ConsumeResult {
44 Ack {
Modified lib/share/events/src/gateway/socket_runtime.rs View lib/share/events/src/gateway/socket_runtime.rs
@@ -266,12 +266,13 @@
266266/// RocketMQ 消费节点:16 lane 分片 + action 扇出。
267267pub async fn run_consumer(
268268 config: &config::event::consumer::RocketMqConsumerConfig,
269 runtime: &queue::QueueRuntime,
269270 host: ActorHost,
270271 platform: PlatformClient,
271272 subscriptions: Subscriptions,
272273 mut shutdown: watch::Receiver<bool>,
273274) -> Result<(), String> {
274 let mut pipe = EventsPipe::new(config)?;
275 let mut pipe = EventsPipe::new(config, runtime)?;
275276 pipe.subscribe_all()
276277 .await
277278 .map_err(|error| error.to_string())?;
@@ -325,8 +326,8 @@
325326 Ok(())
326327}
327328
328fn event_lane(message: &rocketmq_common::common::message::message_ext::MessageExt) -> usize {
329 use rocketmq_common::common::message::MessageTrait;
329fn event_lane(message: &rocketmq_model::common::message::message_ext::MessageExt) -> usize {
330 use rocketmq_model::common::message::MessageTrait;
330331 use std::hash::{Hash, Hasher};
331332
332333 let properties = message.properties();
Modified lib/share/events/src/handler.rs View lib/share/events/src/handler.rs
@@ -2,7 +2,9 @@
22
33use crate::EventKind;
44use config::rocketmq::RocketMqConfig;
5use queue::{EVENT_PREFIX, Envelope, Labels, Publisher, QueueError, QueueResult, RocketMqConn};
5use queue::{
6 EVENT_PREFIX, Envelope, Labels, Publisher, QueueError, QueueResult, QueueRuntime, RocketMqConn,
7};
68
79#[derive(Clone, Debug)]
810pub struct EventHandler {
@@ -16,14 +18,17 @@
1618 }
1719 }
1820
19 pub async fn connect(config: &RocketMqConfig) -> QueueResult<Self> {
20 let conn = RocketMqConn::init(config).await?;
21 pub async fn connect(config: &RocketMqConfig, runtime: &QueueRuntime) -> QueueResult<Self> {
22 let conn = RocketMqConn::init(config, runtime).await?;
2123 Ok(Self::new(conn))
2224 }
2325
24 pub async fn optional(config: Option<&RocketMqConfig>) -> QueueResult<Option<Self>> {
26 pub async fn optional(
27 config: Option<&RocketMqConfig>,
28 runtime: &QueueRuntime,
29 ) -> QueueResult<Option<Self>> {
2530 match config {
26 Some(config) => Self::connect(config).await.map(Some),
31 Some(config) => Self::connect(config, runtime).await.map(Some),
2732 None => Ok(None),
2833 }
2934 }
Modified lib/share/events/src/lib.rs View lib/share/events/src/lib.rs
@@ -1,3 +1,5 @@
1#![recursion_limit = "512"]
2
13mod emit;
24pub use emit::{actor_snapshot, emit};
35pub mod handler;
Modified lib/share/events/Cargo.toml View lib/share/events/Cargo.toml
@@ -29,7 +29,7 @@
2929redis = { workspace = true, optional = true }
3030reqwest = { workspace = true, optional = true }
3131rocketmq-client-rust = { workspace = true, optional = true }
32rocketmq-common = { workspace = true, optional = true }
32rocketmq-model = { workspace = true, optional = true }
3333socket = { workspace = true, optional = true }
3434
3535[features]
@@ -43,7 +43,7 @@
4343 "dep:redis",
4444 "dep:reqwest",
4545 "dep:rocketmq-client-rust",
46 "dep:rocketmq-common",
46 "dep:rocketmq-model",
4747 "dep:socket",
4848 "dep:tonic",
4949]
Modified Cargo.lock View Cargo.lock
@@ -69,7 +69,7 @@
6969 "tokio",
7070 "tokio-util",
7171 "tracing",
72 "zstd 0.14.3",
72 "zstd",
7373]
7474
7575[[package]]
@@ -260,6 +260,7 @@
260260 "cipher 0.5.2",
261261 "cpubits",
262262 "cpufeatures 0.3.1",
263 "zeroize",
263264]
264265
265266[[package]]
@@ -288,6 +289,7 @@
288289 "ctr 0.10.1",
289290 "ctutils",
290291 "ghash 0.6.0",
292 "zeroize",
291293]
292294
293295[[package]]
@@ -868,8 +870,6 @@
868870 "rand_core 0.6.4",
869871 "redis",
870872 "reqwest 0.13.5",
871 "rocketmq-client-rust",
872 "rocketmq-common",
873873 "rsa",
874874 "sea-orm",
875875 "serde",
@@ -906,7 +906,7 @@
906906checksum = "01eb8a458c003bd8fe37badba2d8a5a3839748b6ade5cc2d92c2c6b9c6d5a437"
907907dependencies = [
908908 "attohttpc",
909 "dirs 5.0.1",
909 "dirs",
910910 "log 0.4.34",
911911 "quick-xml",
912912 "rust-ini 0.18.0",
@@ -1396,9 +1396,9 @@
13961396
13971397[[package]]
13981398name = "cheetah-string"
1399version = "1.2.0"
1399version = "3.1.0"
14001400source = "registry+https://github.com/rust-lang/crates.io-index"
1401checksum = "a0e88622a110f2e13dd967659b323da9481172a1092d8b1c9a45194f2a36b758"
1401checksum = "0b57c1a05a24835a7eb67f14f7aade9e6d2bb683ccce58cd0ab0ce16224881fa"
14021402dependencies = [
14031403 "bytes",
14041404 "memchr",
@@ -1759,18 +1759,6 @@
17591759]
17601760
17611761[[package]]
1762name = "cron"
1763version = "0.16.0"
1764source = "registry+https://github.com/rust-lang/crates.io-index"
1765checksum = "089df96cf6a25253b4b6b6744d86f91150a3d4df546f31a95def47976b8cba97"
1766dependencies = [
1767 "chrono",
1768 "once_cell",
1769 "phf 0.11.3",
1770 "winnow 0.7.15",
1771]
1772
1773[[package]]
17741762name = "crossbeam-channel"
17751763version = "0.5.17"
17761764source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2144,16 +2132,7 @@
21442132source = "registry+https://github.com/rust-lang/crates.io-index"
21452133checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
21462134dependencies = [
2147 "dirs-sys 0.4.1",
2148]
2149
2150[[package]]
2151name = "dirs"
2152version = "6.0.0"
2153source = "registry+https://github.com/rust-lang/crates.io-index"
2154checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
2155dependencies = [
2156 "dirs-sys 0.5.0",
2135 "dirs-sys",
21572136]
21582137
21592138[[package]]
@@ -2164,23 +2143,11 @@
21642143dependencies = [
21652144 "libc",
21662145 "option-ext",
2167 "redox_users 0.4.6",
2146 "redox_users",
21682147 "windows-sys 0.48.0",
21692148]
21702149
21712150[[package]]
2172name = "dirs-sys"
2173version = "0.5.0"
2174source = "registry+https://github.com/rust-lang/crates.io-index"
2175checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
2176dependencies = [
2177 "libc",
2178 "option-ext",
2179 "redox_users 0.5.3",
2180 "windows-sys 0.61.2",
2181]
2182
2183[[package]]
21842151name = "dispatch2"
21852152version = "0.3.1"
21862153source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2443,7 +2410,7 @@
24432410 "redis",
24442411 "reqwest 0.12.28",
24452412 "rocketmq-client-rust",
2446 "rocketmq-common",
2413 "rocketmq-model",
24472414 "sea-orm",
24482415 "serde",
24492416 "serde_json",
@@ -2788,6 +2755,7 @@
27882755checksum = "2eecf2d5dc9b66b732b97707a0210906b1d30523eb773193ab777c0c84b3e8d5"
27892756dependencies = [
27902757 "polyval 0.7.3",
2758 "zeroize",
27912759]
27922760
27932761[[package]]
@@ -3165,17 +3133,6 @@
31653133checksum = "019ece39bbefc17f13f677a690328cb978dbf6790e141a3c24e66372cb38588b"
31663134dependencies = [
31673135 "digest 0.10.7",
3168]
3169
3170[[package]]
3171name = "hostname"
3172version = "0.4.2"
3173source = "registry+https://github.com/rust-lang/crates.io-index"
3174checksum = "617aaa3557aef3810a6369d0a99fac8a080891b68bd9f9812a1eeda0c0730cbd"
3175dependencies = [
3176 "cfg-if",
3177 "libc",
3178 "windows-link",
31793136]
31803137
31813138[[package]]
@@ -3676,6 +3633,9 @@
36763633version = "2.12.2"
36773634source = "registry+https://github.com/rust-lang/crates.io-index"
36783635checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0"
3636dependencies = [
3637 "serde",
3638]
36793639
36803640[[package]]
36813641name = "ipnetwork"
@@ -4270,9 +4230,9 @@
42704230
42714231[[package]]
42724232name = "lz4_flex"
4273version = "0.13.1"
4233version = "0.14.0"
42744234source = "registry+https://github.com/rust-lang/crates.io-index"
4275checksum = "7ef0d4ed8669f8f8826eb00dc878084aa8f253506c4fd5e8f58f5bce72ddb97e"
4235checksum = "ecbdfe44b1bd960b68170b417450a628c43f7cf56bb3c5317e61cb230ee7f226"
42764236
42774237[[package]]
42784238name = "mac_address"
@@ -4326,16 +4286,6 @@
43264286 "proc-macro2-diagnostics",
43274287 "quote",
43284288 "syn 2.0.119",
4329]
4330
4331[[package]]
4332name = "md-5"
4333version = "0.10.6"
4334source = "registry+https://github.com/rust-lang/crates.io-index"
4335checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
4336dependencies = [
4337 "cfg-if",
4338 "digest 0.10.7",
43394289]
43404290
43414291[[package]]
@@ -4596,6 +4546,15 @@
45964546]
45974547
45984548[[package]]
4549name = "ntapi"
4550version = "0.4.3"
4551source = "registry+https://github.com/rust-lang/crates.io-index"
4552checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae"
4553dependencies = [
4554 "winapi",
4555]
4556
4557[[package]]
45994558name = "nu-ansi-term"
46004559version = "0.50.3"
46014560source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4800,6 +4759,16 @@
48004759]
48014760
48024761[[package]]
4762name = "objc2-io-kit"
4763version = "0.3.2"
4764source = "registry+https://github.com/rust-lang/crates.io-index"
4765checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15"
4766dependencies = [
4767 "libc",
4768 "objc2-core-foundation",
4769]
4770
4771[[package]]
48034772name = "objc2-io-surface"
48044773version = "0.3.2"
48054774source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4811,6 +4780,17 @@
48114780]
48124781
48134782[[package]]
4783name = "objc2-open-directory"
4784version = "0.3.2"
4785source = "registry+https://github.com/rust-lang/crates.io-index"
4786checksum = "bb82bed227edf5201dfedf072bba4015a33d3d4a98519837295a90f0a23f676d"
4787dependencies = [
4788 "objc2",
4789 "objc2-core-foundation",
4790 "objc2-foundation",
4791]
4792
4793[[package]]
48144794name = "objc2-quartz-core"
48154795version = "0.3.2"
48164796source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5225,16 +5205,6 @@
52255205]
52265206
52275207[[package]]
5228name = "pem"
5229version = "3.0.6"
5230source = "registry+https://github.com/rust-lang/crates.io-index"
5231checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be"
5232dependencies = [
5233 "base64 0.22.1",
5234 "serde_core",
5235]
5236
5237[[package]]
52385208name = "pem-rfc7468"
52395209version = "0.7.0"
52405210source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5311,16 +5281,6 @@
53115281
53125282[[package]]
53135283name = "phf"
5314version = "0.11.3"
5315source = "registry+https://github.com/rust-lang/crates.io-index"
5316checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
5317dependencies = [
5318 "phf_macros 0.11.3",
5319 "phf_shared 0.11.3",
5320]
5321
5322[[package]]
5323name = "phf"
53245284version = "0.12.1"
53255285source = "registry+https://github.com/rust-lang/crates.io-index"
53265286checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7"
@@ -5334,18 +5294,8 @@
53345294source = "registry+https://github.com/rust-lang/crates.io-index"
53355295checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
53365296dependencies = [
5337 "phf_macros 0.13.1",
5297 "phf_macros",
53385298 "phf_shared 0.13.1",
5339]
5340
5341[[package]]
5342name = "phf_generator"
5343version = "0.11.3"
5344source = "registry+https://github.com/rust-lang/crates.io-index"
5345checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
5346dependencies = [
5347 "phf_shared 0.11.3",
5348 "rand 0.8.8",
53495299]
53505300
53515301[[package]]
@@ -5360,37 +5310,15 @@
53605310
53615311[[package]]
53625312name = "phf_macros"
5363version = "0.11.3"
5364source = "registry+https://github.com/rust-lang/crates.io-index"
5365checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216"
5366dependencies = [
5367 "phf_generator 0.11.3",
5368 "phf_shared 0.11.3",
5369 "proc-macro2",
5370 "quote",
5371 "syn 2.0.119",
5372]
5373
5374[[package]]
5375name = "phf_macros"
53765313version = "0.13.1"
53775314source = "registry+https://github.com/rust-lang/crates.io-index"
53785315checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef"
53795316dependencies = [
5380 "phf_generator 0.13.1",
5317 "phf_generator",
53815318 "phf_shared 0.13.1",
53825319 "proc-macro2",
53835320 "quote",
53845321 "syn 2.0.119",
5385]
5386
5387[[package]]
5388name = "phf_shared"
5389version = "0.11.3"
5390source = "registry+https://github.com/rust-lang/crates.io-index"
5391checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
5392dependencies = [
5393 "siphasher",
53945322]
53955323
53965324[[package]]
@@ -5550,6 +5478,7 @@
55505478 "cpubits",
55515479 "cpufeatures 0.3.1",
55525480 "universal-hash 0.6.1",
5481 "zeroize",
55535482]
55545483
55555484[[package]]
@@ -5847,12 +5776,13 @@
58475776name = "queue"
58485777version = "1.0.0"
58495778dependencies = [
5850 "async-trait",
58515779 "bytes",
58525780 "chrono",
58535781 "config 1.0.0",
58545782 "rocketmq-client-rust",
5855 "rocketmq-common",
5783 "rocketmq-model",
5784 "rocketmq-observability",
5785 "rocketmq-runtime",
58565786 "serde",
58575787 "serde_json",
58585788 "tokio",
@@ -6052,19 +5982,6 @@
60525982]
60535983
60545984[[package]]
6055name = "rcgen"
6056version = "0.13.2"
6057source = "registry+https://github.com/rust-lang/crates.io-index"
6058checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2"
6059dependencies = [
6060 "pem",
6061 "ring",
6062 "rustls-pki-types",
6063 "time 0.3.55",
6064 "yasna",
6065]
6066
6067[[package]]
60685985name = "read-fonts"
60695986version = "0.39.2"
60705987source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -6126,16 +6043,6 @@
61266043]
61276044
61286045[[package]]
6129name = "redox_users"
6130version = "0.5.3"
6131source = "registry+https://github.com/rust-lang/crates.io-index"
6132checksum = "60dc65c0ff1a7ae1294b0c67b9f14baf70b644404010370171787bfac1038fc0"
6133dependencies = [
6134 "libredox",
6135 "thiserror 2.0.21",
6136]
6137
6138[[package]]
61396046name = "regex"
61406047version = "1.13.1"
61416048source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -6279,26 +6186,33 @@
62796186
62806187[[package]]
62816188name = "rocketmq-auth"
6282version = "0.9.0"
6189version = "1.0.0"
62836190source = "registry+https://github.com/rust-lang/crates.io-index"
6284checksum = "4e0584102ce3b4f0286e6e1f80466841f6e55365a22f5cc5232370a9dbb112ca"
6191checksum = "b4f890473bc6a7b6193a91b0c9d744ff1d19a992387b5cb0db7281626ee06f45"
62856192dependencies = [
6286 "base64 0.22.1",
6193 "aes-gcm 0.11.1",
6194 "arc-swap",
6195 "base64 0.23.1",
62876196 "cheetah-string",
62886197 "chrono",
62896198 "hex",
62906199 "hmac 0.13.0",
62916200 "ipnetwork",
6292 "md-5 0.11.0",
6201 "md-5",
62936202 "moka",
6294 "rocketmq-common",
62956203 "rocketmq-error",
6296 "rocketmq-remoting",
6204 "rocketmq-model",
6205 "rocketmq-observability",
6206 "rocketmq-protocol",
6207 "rocketmq-runtime",
6208 "rocketmq-security-api",
6209 "rocketmq-transport",
62976210 "serde",
62986211 "serde_json",
62996212 "serde_yaml",
63006213 "sha1 0.11.0",
63016214 "sha2 0.11.1",
6215 "subtle",
63026216 "thiserror 2.0.21",
63036217 "tokio",
63046218 "tracing",
@@ -6306,10 +6220,11 @@
63066220
63076221[[package]]
63086222name = "rocketmq-client-rust"
6309version = "0.9.0"
6223version = "1.0.0"
63106224source = "registry+https://github.com/rust-lang/crates.io-index"
6311checksum = "48fb082c2b5c1f32ee0156b21a633b82630c6ecb0a4cb755b7897a1a735ff9d6"
6225checksum = "db0ae6bb8a6c35f7081f47530a199172837a74712a0a6d97b3374749e03d34a5"
63126226dependencies = [
6227 "arc-swap",
63136228 "bytes",
63146229 "cheetah-string",
63156230 "dashmap",
@@ -6318,11 +6233,13 @@
63186233 "parking_lot",
63196234 "rand 0.10.3",
63206235 "rocketmq-auth",
6321 "rocketmq-common",
63226236 "rocketmq-error",
6323 "rocketmq-remoting",
6237 "rocketmq-model",
6238 "rocketmq-observability",
6239 "rocketmq-protocol",
63246240 "rocketmq-runtime",
6325 "rocketmq-rust",
6241 "rocketmq-security-api",
6242 "rocketmq-transport",
63266243 "serde",
63276244 "serde_json",
63286245 "smallvec",
@@ -6333,137 +6250,188 @@
63336250]
63346251
63356252[[package]]
6336name = "rocketmq-common"
6337version = "0.9.0"
6253name = "rocketmq-error"
6254version = "1.0.0"
6255source = "registry+https://github.com/rust-lang/crates.io-index"
6256checksum = "c32950e99eb766ad1adc2ca08a365bcc1d6e8a7d22ff0095b4724ae4426296b9"
6257dependencies = [
6258 "thiserror 2.0.21",
6259]
6260
6261[[package]]
6262name = "rocketmq-macros"
6263version = "1.0.0"
6264source = "registry+https://github.com/rust-lang/crates.io-index"
6265checksum = "7954582ded75f5e150d5c89acd00fce7ff49c15d52628168895c457d47aac753"
6266dependencies = [
6267 "proc-macro-crate",
6268 "proc-macro2",
6269 "quote",
6270 "syn 3.0.9",
6271]
6272
6273[[package]]
6274name = "rocketmq-model"
6275version = "1.0.0"
63386276source = "registry+https://github.com/rust-lang/crates.io-index"
6339checksum = "d7f82de53d643f6c88f11fb4e5803063e20de7a9aa4eb5b9fee2a3963a4f5a2c"
6277checksum = "37ac5a579db5379863dc2839da3d2abd53c2039c1f68d5ec163be6034bce058a"
63406278dependencies = [
6341 "anyhow",
6342 "base64 0.22.1",
6279 "base64 0.23.1",
63436280 "byteorder",
63446281 "bytes",
63456282 "cheetah-string",
63466283 "chrono",
6347 "chrono-tz",
6348 "config 0.15.27",
63496284 "crc",
63506285 "dashmap",
6351 "dirs 6.0.0",
63526286 "flate2",
6353 "form_urlencoded",
6354 "futures",
6355 "hostname",
6356 "iana-time-zone",
63576287 "local-ip-address",
63586288 "lz4_flex",
6359 "md-5 0.10.6",
6360 "num_cpus",
6361 "opentelemetry",
6362 "parking_lot",
6363 "regex",
6364 "reqwest 0.13.5",
6289 "md-5",
63656290 "rocketmq-error",
6366 "rocketmq-rust",
63676291 "serde",
63686292 "serde_json",
6369 "tempfile",
6293 "strum",
63706294 "thiserror 2.0.21",
6371 "time 0.3.55",
6372 "tokio",
63736295 "tracing",
6374 "tracing-appender",
6375 "tracing-subscriber",
6376 "trait-variant",
63776296 "uuid",
6378 "zstd 0.13.3",
6297 "zstd",
63796298]
63806299
63816300[[package]]
6382name = "rocketmq-error"
6383version = "0.9.0"
6301name = "rocketmq-observability"
6302version = "1.0.0"
63846303source = "registry+https://github.com/rust-lang/crates.io-index"
6385checksum = "38fade7f274ff354923e0d453e53e61f1fcf7271dfdf7bdee86760579c561711"
6304checksum = "14967a34abfd78f88f463b5abdfd28e9e1a56c1e263ab6a1ae40fd1226fbb16f"
63866305dependencies = [
63876306 "anyhow",
6388 "config 0.15.27",
6307 "cheetah-string",
6308 "chrono",
6309 "chrono-tz",
6310 "dashmap",
6311 "iana-time-zone",
6312 "parking_lot",
6313 "rocketmq-error",
6314 "rocketmq-model",
6315 "rocketmq-runtime",
6316 "serde",
63896317 "serde_json",
6318 "serde_yaml",
6319 "sha2 0.11.1",
63906320 "thiserror 2.0.21",
6321 "time 0.3.55",
6322 "tokio",
6323 "tokio-util",
6324 "tracing",
6325 "tracing-appender",
6326 "tracing-log",
6327 "tracing-subscriber",
63916328]
63926329
63936330[[package]]
6394name = "rocketmq-macros"
6395version = "0.9.0"
6396source = "registry+https://github.com/rust-lang/crates.io-index"
6397checksum = "74f9ab7ab4f2096ed8ab9f15be489c9be963ada4fffc0700222a61a9777f250a"
6398dependencies = [
6399 "proc-macro2",
6400 "quote",
6401 "syn 2.0.119",
6402]
6403
6404[[package]]
6405name = "rocketmq-remoting"
6406version = "0.9.0"
6331name = "rocketmq-protocol"
6332version = "1.0.0"
64076333source = "registry+https://github.com/rust-lang/crates.io-index"
6408checksum = "3b609e95e018894c42c90654ea8d9b9be20d2566760ecbfa54b132c64a43bcb9"
6334checksum = "98e38013afd09e358515e613a198469d2bd378c22d9b4d5a9ff2ace66d07acb8"
64096335dependencies = [
6410 "anyhow",
6411 "arc-swap",
64126336 "bitvec",
64136337 "bytemuck",
6338 "byteorder",
64146339 "bytes",
64156340 "cheetah-string",
6416 "dashmap",
6341 "chrono",
64176342 "flate2",
6418 "flume",
6419 "futures",
6420 "futures-util",
6421 "num_cpus",
6422 "parking_lot",
6343 "itoa",
6344 "lz4_flex",
6345 "memchr",
64236346 "rand 0.10.3",
6424 "rcgen",
6425 "rocketmq-common",
64266347 "rocketmq-error",
64276348 "rocketmq-macros",
6428 "rocketmq-rust",
6429 "rustls-native-certs",
6430 "rustls-pemfile",
6349 "rocketmq-model",
64316350 "serde",
64326351 "serde_json",
64336352 "serde_json_any_key",
6353 "thiserror 2.0.21",
6354 "zstd",
6355]
6356
6357[[package]]
6358name = "rocketmq-runtime"
6359version = "1.0.0"
6360source = "registry+https://github.com/rust-lang/crates.io-index"
6361checksum = "e84fd9915ce2f98fa040ebdd2eeaf66c80a1ee713bc7a98a8649762a49479018"
6362dependencies = [
6363 "chrono",
6364 "config 0.15.27",
6365 "dashmap",
6366 "futures",
6367 "parking_lot",
6368 "rocketmq-error",
6369 "serde",
6370 "serde_json",
6371 "smallvec",
6372 "sysinfo",
6373 "thiserror 2.0.21",
64346374 "tokio",
6435 "tokio-rustls",
64366375 "tokio-util",
64376376 "tracing",
6438 "trait-variant",
64396377 "uuid",
6378 "windows-sys 0.61.2",
64406379]
64416380
64426381[[package]]
6443name = "rocketmq-runtime"
6444version = "0.9.0"
6382name = "rocketmq-security-api"
6383version = "1.0.0"
64456384source = "registry+https://github.com/rust-lang/crates.io-index"
6446checksum = "77fc99d6c519fbc6398571920810cda636d134386232d2ec721dd720760d0b6a"
6385checksum = "4a034dbe78ccda2135b789b4f5916bb70be64a3fb4a16d80fe6ea9f90f1ec39b"
64476386dependencies = [
6448 "tokio",
6387 "cheetah-string",
6388 "rocketmq-error",
6389 "serde",
6390 "thiserror 2.0.21",
6391 "zeroize",
64496392]
64506393
64516394[[package]]
6452name = "rocketmq-rust"
6453version = "0.9.0"
6395name = "rocketmq-transport"
6396version = "1.0.0"
64546397source = "registry+https://github.com/rust-lang/crates.io-index"
6455checksum = "b610d847664dabce9ac7c41999f39573532c460af2eda3cdc517c8d09ca96c52"
6398checksum = "9eb730367e605f53f854362ac26a974303ee125cbb2b139519d1fe664cb47d6a"
64566399dependencies = [
64576400 "anyhow",
6458 "chrono",
6459 "cron",
6401 "arc-swap",
6402 "bitvec",
6403 "bytemuck",
6404 "bytes",
6405 "cheetah-string",
6406 "dashmap",
6407 "flate2",
6408 "flume",
6409 "form_urlencoded",
6410 "futures",
6411 "futures-util",
6412 "ipnet",
6413 "local-ip-address",
6414 "num_cpus",
64606415 "parking_lot",
6416 "pin-project-lite",
6417 "rand 0.10.3",
6418 "reqwest 0.13.5",
64616419 "rocketmq-error",
6420 "rocketmq-model",
6421 "rocketmq-protocol",
6422 "rocketmq-runtime",
6423 "rocketmq-security-api",
64626424 "serde",
6425 "serde_json",
6426 "serde_json_any_key",
6427 "socket2 0.6.5",
6428 "thiserror 2.0.21",
64636429 "tokio",
64646430 "tokio-util",
64656431 "tracing",
6432 "trait-variant",
64666433 "uuid",
6434 "zeroize",
64676435]
64686436
64696437[[package]]
@@ -6581,7 +6549,7 @@
65816549 "quick-xml",
65826550 "serde",
65836551 "sha2 0.10.9",
6584 "strum_macros",
6552 "strum_macros 0.24.3",
65856553 "thiserror 1.0.69",
65866554 "time 0.3.55",
65876555 "tokio",
@@ -6665,15 +6633,6 @@
66656633]
66666634
66676635[[package]]
6668name = "rustls-pemfile"
6669version = "2.2.0"
6670source = "registry+https://github.com/rust-lang/crates.io-index"
6671checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50"
6672dependencies = [
6673 "rustls-pki-types",
6674]
6675
6676[[package]]
66776636name = "rustls-pki-types"
66786637version = "1.15.1"
66796638source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -7551,7 +7510,7 @@
75517510 "hmac 0.13.0",
75527511 "itoa",
75537512 "log 0.4.34",
7554 "md-5 0.11.0",
7513 "md-5",
75557514 "memchr",
75567515 "rand 0.10.3",
75577516 "rust_decimal",
@@ -7643,6 +7602,9 @@
76437602version = "0.28.0"
76447603source = "registry+https://github.com/rust-lang/crates.io-index"
76457604checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd"
7605dependencies = [
7606 "strum_macros 0.28.0",
7607]
76467608
76477609[[package]]
76487610name = "strum_macros"
@@ -7658,6 +7620,18 @@
76587620]
76597621
76607622[[package]]
7623name = "strum_macros"
7624version = "0.28.0"
7625source = "registry+https://github.com/rust-lang/crates.io-index"
7626checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664"
7627dependencies = [
7628 "heck 0.5.0",
7629 "proc-macro2",
7630 "quote",
7631 "syn 2.0.119",
7632]
7633
7634[[package]]
76617635name = "subtle"
76627636version = "2.6.1"
76637637source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -7740,6 +7714,21 @@
77407714]
77417715
77427716[[package]]
7717name = "sysinfo"
7718version = "0.39.6"
7719source = "registry+https://github.com/rust-lang/crates.io-index"
7720checksum = "d2071df9448915b71c4fe6d25deaf1c22f12bd234f01540b77312bb8e41361e6"
7721dependencies = [
7722 "libc",
7723 "memchr",
7724 "ntapi",
7725 "objc2-core-foundation",
7726 "objc2-io-kit",
7727 "objc2-open-directory",
7728 "windows",
7729]
7730
7731[[package]]
77437732name = "system-configuration"
77447733version = "0.7.0"
77457734source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -7986,7 +7975,6 @@
79867975 "futures-io",
79877976 "futures-sink",
79887977 "futures-util",
7989 "hashbrown 0.15.5",
79907978 "libc",
79917979 "pin-project-lite",
79927980 "slab",
@@ -8283,6 +8271,16 @@
82838271]
82848272
82858273[[package]]
8274name = "tracing-serde"
8275version = "0.2.0"
8276source = "registry+https://github.com/rust-lang/crates.io-index"
8277checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1"
8278dependencies = [
8279 "serde",
8280 "tracing-core",
8281]
8282
8283[[package]]
82868284name = "tracing-subscriber"
82878285version = "0.3.23"
82888286source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -8292,6 +8290,8 @@
82928290 "nu-ansi-term",
82938291 "once_cell",
82948292 "regex-automata",
8293 "serde",
8294 "serde_json",
82958295 "sharded-slab",
82968296 "smallvec",
82978297 "thread_local",
@@ -8299,6 +8299,7 @@
82998299 "tracing",
83008300 "tracing-core",
83018301 "tracing-log",
8302 "tracing-serde",
83028303]
83038304
83048305[[package]]
@@ -8959,6 +8960,27 @@
89598960checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
89608961
89618962[[package]]
8963name = "windows"
8964version = "0.62.2"
8965source = "registry+https://github.com/rust-lang/crates.io-index"
8966checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
8967dependencies = [
8968 "windows-collections",
8969 "windows-core",
8970 "windows-future",
8971 "windows-numerics",
8972]
8973
8974[[package]]
8975name = "windows-collections"
8976version = "0.3.2"
8977source = "registry+https://github.com/rust-lang/crates.io-index"
8978checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
8979dependencies = [
8980 "windows-core",
8981]
8982
8983[[package]]
89628984name = "windows-core"
89638985version = "0.62.2"
89648986source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -8972,6 +8994,17 @@
89728994]
89738995
89748996[[package]]
8997name = "windows-future"
8998version = "0.3.2"
8999source = "registry+https://github.com/rust-lang/crates.io-index"
9000checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
9001dependencies = [
9002 "windows-core",
9003 "windows-link",
9004 "windows-threading",
9005]
9006
9007[[package]]
89759008name = "windows-implement"
89769009version = "0.60.2"
89779010source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -9000,6 +9033,16 @@
90009033checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
90019034
90029035[[package]]
9036name = "windows-numerics"
9037version = "0.3.1"
9038source = "registry+https://github.com/rust-lang/crates.io-index"
9039checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
9040dependencies = [
9041 "windows-core",
9042 "windows-link",
9043]
9044
9045[[package]]
90039046name = "windows-registry"
90049047version = "0.6.1"
90059048source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -9120,6 +9163,15 @@
91209163]
91219164
91229165[[package]]
9166name = "windows-threading"
9167version = "0.2.1"
9168source = "registry+https://github.com/rust-lang/crates.io-index"
9169checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"
9170dependencies = [
9171 "windows-link",
9172]
9173
9174[[package]]
91239175name = "windows_aarch64_gnullvm"
91249176version = "0.42.2"
91259177source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -9314,15 +9366,6 @@
93149366checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049"
93159367
93169368[[package]]
9317name = "yasna"
9318version = "0.5.2"
9319source = "registry+https://github.com/rust-lang/crates.io-index"
9320checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd"
9321dependencies = [
9322 "time 0.3.55",
9323]
9324
9325[[package]]
93269369name = "yoke"
93279370version = "0.8.4"
93289371source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -9479,29 +9522,11 @@
94799522
94809523[[package]]
94819524name = "zstd"
9482version = "0.13.3"
9483source = "registry+https://github.com/rust-lang/crates.io-index"
9484checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a"
9485dependencies = [
9486 "zstd-safe 7.3.0",
9487]
9488
9489[[package]]
9490name = "zstd"
94919525version = "0.14.3"
94929526source = "registry+https://github.com/rust-lang/crates.io-index"
94939527checksum = "db3ae9bf90af6e40197bef767eeefc46ad6397420fe873830bd85e5fbbfb3c70"
94949528dependencies = [
9495 "zstd-safe 8.2.0",
9496]
9497
9498[[package]]
9499name = "zstd-safe"
9500version = "7.3.0"
9501source = "registry+https://github.com/rust-lang/crates.io-index"
9502checksum = "64d80649ab6db9d9f6f9c80a40becd948eda4714a0a5ac8c4d157a32231c7882"
9503dependencies = [
9504 "zstd-sys",
9529 "zstd-safe",
95059530]
95069531
95079532[[package]]
Modified Cargo.toml View Cargo.toml
@@ -102,8 +102,10 @@
102102prost = "0.14"
103103prost-types = "0.14"
104104tonic-prost-build = "0.14"
105rocketmq-client-rust = "0.9.0"
106rocketmq-common = "0.9.0"
105rocketmq-client-rust = "1.0.0"
106rocketmq-model = "1.0.0"
107rocketmq-observability = "1.0.0"
108rocketmq-runtime = "1.0.0"
107109
108110hyper = { version = "1.12.0", features = ["http1", "server"] }
109111hyper-util = { version = "0.1.21", features = ["tokio", "client-legacy", "http1"] }