@@ -50,11 +50,13 @@ use std::collections::BTreeSet;
5050use std:: collections:: HashMap ;
5151use std:: collections:: HashSet ;
5252use std:: collections:: LinkedList ;
53+ use std:: default:: Default ;
5354use std:: net:: SocketAddr ;
5455use std:: sync:: Arc ;
5556use std:: time:: Duration ;
5657
5758use crate :: common:: constant:: EMPTY_ARC_STRING ;
59+ use crate :: common:: model:: privilege:: NamespacePrivilegeGroup ;
5860use crate :: metrics:: metrics_key:: MetricsKey ;
5961use crate :: metrics:: model:: { MetricsItem , MetricsQuery , MetricsRecord } ;
6062use crate :: namespace:: NamespaceActor ;
@@ -689,6 +691,8 @@ impl NamingActor {
689691 ( size, service_names)
690692 }
691693
694+ ///过程生成的不必要的临时对象过多,使用v2版本
695+ #[ deprecated]
692696 pub fn get_subscribers_list (
693697 & self ,
694698 page_size : usize ,
@@ -740,6 +744,35 @@ impl NamingActor {
740744 ( total, paginated_result)
741745 }
742746
747+ pub fn get_subscribers_list_v2 (
748+ & self ,
749+ page_size : usize ,
750+ page_index : usize ,
751+ key : & ServiceKey ,
752+ ) -> ( usize , Vec < SubscriberInfoDto > ) {
753+ let offset = if page_index == 0 {
754+ 0
755+ } else {
756+ page_size * ( page_index - 1 )
757+ } ;
758+ let param = ServiceQueryParam {
759+ offset,
760+ limit : page_size,
761+ namespace_id : Some ( key. namespace_id . clone ( ) ) ,
762+ like_group : Some ( key. group_name . as_ref ( ) . clone ( ) ) ,
763+ like_service : Some ( key. service_name . as_ref ( ) . clone ( ) ) ,
764+ ..Default :: default ( )
765+ } ;
766+ self . subscriber . query_service_listener_page ( & param)
767+ }
768+
769+ pub fn get_subscribers_list_by_param (
770+ & self ,
771+ param : ServiceQueryParam ,
772+ ) -> ( usize , Vec < SubscriberInfoDto > ) {
773+ self . subscriber . query_service_listener_page ( & param)
774+ }
775+
743776 pub fn get_service_info_page ( & self , param : ServiceQueryParam ) -> ( usize , Vec < ServiceInfoDto > ) {
744777 let ( size, list) = self . namespace_index . query_service_page ( & param) ;
745778
@@ -1026,6 +1059,7 @@ pub enum NamingCmd {
10261059 QueryServiceInfo ( ServiceKey , String , bool ) ,
10271060 QueryServicePage ( ServiceKey , usize , usize ) ,
10281061 QueryServiceSubscribersPage ( ServiceKey , usize , usize ) ,
1062+ QueryServiceSubscribersPageV2 ( ServiceQueryParam ) ,
10291063 //查询服务实际信息列表
10301064 QueryServiceInfoPage ( ServiceQueryParam ) ,
10311065 //CreateService(ServiceDetailDto),
@@ -1056,7 +1090,7 @@ pub enum NamingResult {
10561090 InstanceListString ( String ) ,
10571091 ServiceInfo ( ServiceInfo ) ,
10581092 ServicePage ( ( usize , Vec < Arc < String > > ) ) ,
1059- ServiceSubscribersPage ( ( usize , Vec < Arc < SubscriberInfoDto > > ) ) ,
1093+ ServiceSubscribersPage ( ( usize , Vec < SubscriberInfoDto > ) ) ,
10601094 ServiceInfoPage ( ( usize , Vec < ServiceInfoDto > ) ) ,
10611095 ClientInstanceCount ( Vec < ( Arc < String > , usize ) > ) ,
10621096 RewriteToCluster ( u64 , Instance ) ,
@@ -1158,12 +1192,15 @@ impl Handler<NamingCmd> for NamingActor {
11581192 }
11591193 NamingCmd :: QueryServiceSubscribersPage ( service_key, page_size, page_index) => {
11601194 Ok ( NamingResult :: ServiceSubscribersPage (
1161- self . get_subscribers_list ( page_size, page_index, & service_key) ,
1195+ self . get_subscribers_list_v2 ( page_size, page_index, & service_key) ,
11621196 ) )
11631197 }
11641198 NamingCmd :: QueryServiceInfoPage ( param) => Ok ( NamingResult :: ServiceInfoPage (
11651199 self . get_service_info_page ( param) ,
11661200 ) ) ,
1201+ NamingCmd :: QueryServiceSubscribersPageV2 ( param) => Ok (
1202+ NamingResult :: ServiceSubscribersPage ( self . get_subscribers_list_by_param ( param) ) ,
1203+ ) ,
11671204 NamingCmd :: PeekListenerTimeout => {
11681205 self . time_check ( ) ;
11691206 //self.notify_check();
0 commit comments