-
|
I’m building a delayed message scheduling service. When the leader changes, the new leader needs to check whether the cluster membership has changed (i.e., nodes added or removed). If the number of nodes has changed, the shards need to be rebalanced. |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 1 reply
-
|
Founded: https://docs.rs/d-engine/latest/d_engine/trait.ClientApi.html#tymethod.list_members |
Beta Was this translation helpful? Give feedback.
-
|
Two patterns depending on your deployment mode: Embedded mode — live query, no refresh needed: // Subscribe first to avoid missing changes during election
let mut rx = engine.leader_change_notifier();
engine.wait_ready(Duration::from_secs(5)).await?;
// list_members() sends a live query to Raft core — always current
let members = engine.client().list_members().await?;
// React to future leader changes
while rx.changed().await.is_ok() {
if let Some(info) = *rx.borrow() {
if info.leader_id == engine.node_id() {
let members = engine.client().list_members().await?;
rebalance_shards(members);
}
}
}Note: requires Standalone/gRPC mode — cached data, must refresh first: // list_members() returns cached pool data — call refresh() first
client.refresh(None).await?;
let members = client.list_members().await?;Both APIs are available in v0.2.3. |
Beta Was this translation helpful? Give feedback.
Founded: https://docs.rs/d-engine/latest/d_engine/trait.ClientApi.html#tymethod.list_members
If you have any suggestions for building a delayed message scheduling service, feel free to share.