|
14 | 14 | * See the License for the specific language governing permissions and
|
15 | 15 | * limitations under the License.
|
16 | 16 | */
|
| 17 | +use crate::load_balance::message_request_mode_manager::MessageRequestModeManager; |
| 18 | + use cheetah_string::CheetahString; |
| 19 | + use rocketmq_client_rust::consumer::allocate_message_queue_strategy::AllocateMessageQueueStrategy; |
| 20 | + use rocketmq_client_rust::consumer::rebalance_strategy::allocate_message_queue_averagely::AllocateMessageQueueAveragely; |
| 21 | + use rocketmq_client_rust::consumer::rebalance_strategy::allocate_message_queue_averagely_by_circle::AllocateMessageQueueAveragelyByCircle; |
| 22 | + use rocketmq_common::common::config_manager::ConfigManager; |
| 23 | + use rocketmq_remoting::code::request_code::RequestCode; |
| 24 | + use rocketmq_remoting::net::channel::Channel; |
| 25 | + use rocketmq_remoting::protocol::remoting_command::RemotingCommand; |
| 26 | + use rocketmq_remoting::runtime::connection_handler_context::ConnectionHandlerContext; |
| 27 | + use rocketmq_store::config::message_store_config::MessageStoreConfig; |
| 28 | + use std::collections::HashMap; |
| 29 | + use std::sync::Arc; |
17 | 30 |
|
18 |
| -use rocketmq_remoting::protocol::remoting_command::RemotingCommand; |
19 |
| -use rocketmq_remoting::runtime::connection_handler_context::ConnectionHandlerContext; |
| 31 | +pub struct QueryAssignmentProcessor { |
| 32 | + message_request_mode_manager: MessageRequestModeManager, |
| 33 | + load_strategy: HashMap<CheetahString, Arc<dyn AllocateMessageQueueStrategy>>, |
| 34 | + message_store_config: Arc<MessageStoreConfig>, |
| 35 | +} |
20 | 36 |
|
21 |
| -#[derive(Default)] |
22 |
| -pub struct QueryAssignmentProcessor {} |
| 37 | +impl QueryAssignmentProcessor { |
| 38 | + pub fn new(message_store_config: Arc<MessageStoreConfig>) -> Self { |
| 39 | + let allocate_message_queue_averagely: Arc<dyn AllocateMessageQueueStrategy> = |
| 40 | + Arc::new(AllocateMessageQueueAveragely); |
| 41 | + let allocate_message_queue_averagely_by_circle: Arc<dyn AllocateMessageQueueStrategy> = |
| 42 | + Arc::new(AllocateMessageQueueAveragelyByCircle); |
| 43 | + let mut load_strategy = HashMap::new(); |
| 44 | + load_strategy.insert( |
| 45 | + CheetahString::from_static_str(allocate_message_queue_averagely.get_name()), |
| 46 | + allocate_message_queue_averagely, |
| 47 | + ); |
| 48 | + load_strategy.insert( |
| 49 | + CheetahString::from_static_str(allocate_message_queue_averagely_by_circle.get_name()), |
| 50 | + allocate_message_queue_averagely_by_circle, |
| 51 | + ); |
| 52 | + let manager = MessageRequestModeManager::new(message_store_config.clone()); |
| 53 | + let _ = manager.load(); |
| 54 | + Self { |
| 55 | + message_request_mode_manager: manager, |
| 56 | + load_strategy, |
| 57 | + message_store_config, |
| 58 | + } |
| 59 | + } |
| 60 | +} |
23 | 61 |
|
24 | 62 | impl QueryAssignmentProcessor {
|
25 |
| - fn process_request( |
26 |
| - &self, |
| 63 | + pub async fn process_request( |
| 64 | + &mut self, |
| 65 | + channel: Channel, |
| 66 | + ctx: ConnectionHandlerContext, |
| 67 | + request_code: RequestCode, |
| 68 | + request: RemotingCommand, |
| 69 | + ) -> Option<RemotingCommand> { |
| 70 | + match request_code { |
| 71 | + RequestCode::QueryAssignment => self.query_assignment(channel, ctx, request).await, |
| 72 | + RequestCode::SetMessageRequestMode => { |
| 73 | + self.set_message_request_mode(channel, ctx, request).await |
| 74 | + } |
| 75 | + _ => None, |
| 76 | + } |
| 77 | + } |
| 78 | + |
| 79 | + async fn query_assignment( |
| 80 | + &mut self, |
| 81 | + _channel: Channel, |
| 82 | + _ctx: ConnectionHandlerContext, |
| 83 | + _request: RemotingCommand, |
| 84 | + ) -> Option<RemotingCommand> { |
| 85 | + unimplemented!() |
| 86 | + } |
| 87 | + |
| 88 | + async fn set_message_request_mode( |
| 89 | + &mut self, |
| 90 | + _channel: Channel, |
27 | 91 | _ctx: ConnectionHandlerContext,
|
28 | 92 | _request: RemotingCommand,
|
29 |
| - ) -> RemotingCommand { |
30 |
| - todo!() |
| 93 | + ) -> Option<RemotingCommand> { |
| 94 | + unimplemented!() |
31 | 95 | }
|
32 | 96 | }
|
0 commit comments