use super::*;
impl DefaultMQProducerImpl {
pub fn register_end_transaction_hook(&self, hook: Arc<dyn EndTransactionHook>) {
let mut pending = self.pending_end_transaction_hooks.lock();
let current_state = ProducerState::from_u8(self.state.load(Ordering::Relaxed));
if current_state != ProducerState::Created {
tracing::warn!(
"Cannot register hook after producer started (state: {:?})",
current_state
);
return;
}
if let Some(pending) = pending.as_mut() {
pending.push(hook);
tracing::info!("Registered endTransaction Hook, pending hooks: {}", pending.len());
}
}
pub fn register_check_forbidden_hook(&self, hook: Arc<dyn CheckForbiddenHook>) {
let mut pending = self.pending_forbidden_hooks.lock();
let current_state = ProducerState::from_u8(self.state.load(Ordering::Relaxed));
if current_state != ProducerState::Created {
tracing::warn!(
"Cannot register hook after producer started (state: {:?})",
current_state
);
return;
}
if let Some(pending) = pending.as_mut() {
pending.push(hook);
tracing::info!("Registered checkForbidden Hook, pending hooks: {}", pending.len());
}
}
pub fn register_send_message_hook(&self, hook: Arc<dyn SendMessageHook>) {
let mut pending = self.pending_send_hooks.lock();
let current_state = ProducerState::from_u8(self.state.load(Ordering::Relaxed));
if current_state != ProducerState::Created {
tracing::warn!(
"Cannot register hook after producer started (state: {:?})",
current_state
);
return;
}
if let Some(pending) = pending.as_mut() {
pending.push(hook);
tracing::info!("Registered sendMessage Hook, pending hooks: {}", pending.len());
}
}
pub fn set_rpc_hook(&self, rpc_hook: Arc<dyn RPCHook>) {
let mut current_hook = self.rpc_hook.write();
let current_state = ProducerState::from_u8(self.state.load(Ordering::Relaxed));
if current_state != ProducerState::Created {
tracing::warn!(
"Cannot update RPC hook after producer started (state: {:?})",
current_state
);
return;
}
*current_hook = Some(rpc_hook);
}
}