1+ use dashmap:: DashMap ;
12use deadpool:: managed:: Manager ;
23use deadpool:: managed:: Metrics ;
34use deadpool:: managed:: Pool ;
@@ -18,7 +19,6 @@ use lapin::types::FieldTable;
1819use lapin:: types:: ShortString ;
1920use serde:: Serialize ;
2021use serde_json:: to_vec;
21- use std:: collections:: HashMap ;
2222use std:: fmt:: Debug ;
2323use std:: sync:: Arc ;
2424use thiserror:: Error ;
@@ -93,15 +93,15 @@ impl Manager for ChannelManager {
9393#[ derive( Debug ) ]
9494pub struct ChannelWorker {
9595 channel : Arc < Channel > ,
96- response_tracker : Arc < RwLock < HashMap < String , oneshot:: Sender < Delivery > > > > ,
96+ response_tracker : Arc < DashMap < String , oneshot:: Sender < Delivery > > > ,
9797 consumer_tag : String ,
9898}
9999
100100impl ChannelWorker {
101101 pub async fn new ( channel : Arc < Channel > , hostname : String ) -> Self {
102102 let worker = ChannelWorker {
103103 channel,
104- response_tracker : Arc :: new ( RwLock :: new ( HashMap :: new ( ) ) ) ,
104+ response_tracker : Arc :: new ( DashMap :: new ( ) ) ,
105105 consumer_tag : format ! ( "{}-{}" , hostname, Uuid :: new_v4( ) ) ,
106106 } ;
107107 worker. dispatching_loop ( ) . await ;
@@ -117,8 +117,7 @@ impl ChannelWorker {
117117 correlation_id : String ,
118118 tx : oneshot:: Sender < Delivery > ,
119119 ) {
120- let mut response_tracker = self . response_tracker . write ( ) . await ;
121- response_tracker. insert ( correlation_id, tx) ;
120+ self . response_tracker . insert ( correlation_id, tx) ;
122121 }
123122
124123 pub fn should_reuse ( & self ) -> bool {
@@ -147,8 +146,7 @@ impl ChannelWorker {
147146 while let Some ( delivery) = consumer. next ( ) . await {
148147 let delivery = delivery. expect ( "Error in receiving message" ) ;
149148 if let Some ( correlation_id) = delivery. properties . correlation_id ( ) . as_ref ( ) {
150- let mut tracker = response_tracker. write ( ) . await ;
151- if let Some ( sender) = tracker. remove ( correlation_id. as_str ( ) ) {
149+ if let Some ( ( _, sender) ) = response_tracker. remove ( correlation_id. as_str ( ) ) {
152150 let _ = sender. send ( delivery) ;
153151 }
154152 } else {
0 commit comments