15
15
import com .alibaba .rocketmq .common .UtilAll ;
16
16
import com .alibaba .rocketmq .common .constant .LoggerName ;
17
17
import com .alibaba .rocketmq .common .filter .MessageFilter ;
18
- import com .alibaba .rocketmq .common .utils .HttpTinyClient ;
19
- import com .alibaba .rocketmq .common .utils .HttpTinyClient .HttpResult ;
20
18
import com .alibaba .rocketmq .filtersrv .FiltersrvController ;
21
19
22
20
@@ -35,9 +33,14 @@ public class FilterClassManager {
35
33
private final ScheduledExecutorService scheduledExecutorService = Executors
36
34
.newSingleThreadScheduledExecutor (new ThreadFactoryImpl ("FSGetClassScheduledThread" ));
37
35
36
+ private FilterClassFetchMethod filterClassFetchMethod ;
37
+
38
38
39
39
public FilterClassManager (FiltersrvController filtersrvController ) {
40
40
this .filtersrvController = filtersrvController ;
41
+ this .filterClassFetchMethod =
42
+ new HttpFilterClassFetchMethod (this .filtersrvController .getFiltersrvConfig ()
43
+ .getFilterClassRepertoryUrl ());
41
44
}
42
45
43
46
@@ -65,28 +68,22 @@ private void fetchClassFromRemoteHost() {
65
68
try {
66
69
Entry <String , FilterClassInfo > next = it .next ();
67
70
FilterClassInfo filterClassInfo = next .getValue ();
68
-
69
- String url = this .filtersrvController .getFiltersrvConfig ().getFilterClassRepertoryUrl ();
70
- url += "/" ;
71
- url += filterClassInfo .getClassName ();
72
- url += ".java" ;
73
-
74
- HttpResult result = HttpTinyClient .httpGet (url , null , null , "UTF-8" , 5000 );
75
- if (200 == result .code ) {
76
- String responseStr = result .content ;
77
- byte [] filterSourceBinary = responseStr .getBytes ("UTF-8" );
78
- int classCRC = UtilAll .crc32 (responseStr .getBytes ("UTF-8" ));
79
- if (classCRC != filterClassInfo .getClassCRC ()) {
80
- String javaSource = new String (filterSourceBinary , MixAll .DEFAULT_CHARSET );
81
- Class <?> newClass =
82
- DynaCode .compileAndLoadClass (filterClassInfo .getClassName (), javaSource );
83
- Object newInstance = newClass .newInstance ();
84
- filterClassInfo .setMessageFilter ((MessageFilter ) newInstance );
85
- filterClassInfo .setClassCRC (classCRC );
86
-
87
- log .info ("fetch Remote class File OK, {} {} {}" , next .getKey (),
88
- filterClassInfo .getClassName (), url );
89
- }
71
+ String [] topicAndGroup = next .getKey ().split ("@" );
72
+ String responseStr =
73
+ this .filterClassFetchMethod .fetch (topicAndGroup [0 ], topicAndGroup [1 ],
74
+ filterClassInfo .getClassName ());
75
+ byte [] filterSourceBinary = responseStr .getBytes ("UTF-8" );
76
+ int classCRC = UtilAll .crc32 (responseStr .getBytes ("UTF-8" ));
77
+ if (classCRC != filterClassInfo .getClassCRC ()) {
78
+ String javaSource = new String (filterSourceBinary , MixAll .DEFAULT_CHARSET );
79
+ Class <?> newClass =
80
+ DynaCode .compileAndLoadClass (filterClassInfo .getClassName (), javaSource );
81
+ Object newInstance = newClass .newInstance ();
82
+ filterClassInfo .setMessageFilter ((MessageFilter ) newInstance );
83
+ filterClassInfo .setClassCRC (classCRC );
84
+
85
+ log .info ("fetch Remote class File OK, {} {}" , next .getKey (),
86
+ filterClassInfo .getClassName ());
90
87
}
91
88
}
92
89
catch (Exception e ) {
@@ -158,4 +155,14 @@ public boolean registerFilterClass(final String consumerGroup, final String topi
158
155
public FilterClassInfo findFilterClass (final String consumerGroup , final String topic ) {
159
156
return this .filterClassTable .get (buildKey (consumerGroup , topic ));
160
157
}
158
+
159
+
160
+ public FilterClassFetchMethod getFilterClassFetchMethod () {
161
+ return filterClassFetchMethod ;
162
+ }
163
+
164
+
165
+ public void setFilterClassFetchMethod (FilterClassFetchMethod filterClassFetchMethod ) {
166
+ this .filterClassFetchMethod = filterClassFetchMethod ;
167
+ }
161
168
}
0 commit comments