Skip to content

Commit 7184711

Browse files
committed
refactor
1 parent 4accbe6 commit 7184711

8 files changed

Lines changed: 54 additions & 44 deletions

File tree

weixin-java-common/src/main/java/me/chanjar/weixin/common/util/WxMsgIdDuplicateChecker.java renamed to weixin-java-common/src/main/java/me/chanjar/weixin/common/util/WxMessageDuplicateChecker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* 微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次
77
* </pre>
88
*/
9-
public interface WxMsgIdDuplicateChecker {
9+
public interface WxMessageDuplicateChecker {
1010

1111
/**
1212
* 检查消息ID是否重复

weixin-java-common/src/main/java/me/chanjar/weixin/common/util/WxMsgIdMemoryDuplicateChecker.java renamed to weixin-java-common/src/main/java/me/chanjar/weixin/common/util/WxMessageInMemoryDuplicateChecker.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* 将每个消息id保存在内存里,每隔5秒清理已经过期的消息id,每个消息id的过期时间是15秒
1111
* </pre>
1212
*/
13-
public class WxMsgIdMemoryDuplicateChecker implements WxMsgIdDuplicateChecker {
13+
public class WxMessageInMemoryDuplicateChecker implements WxMessageDuplicateChecker {
1414

1515
/**
1616
* 一个消息ID在内存的过期时间:15秒
@@ -39,7 +39,7 @@ public class WxMsgIdMemoryDuplicateChecker implements WxMsgIdDuplicateChecker {
3939
* 每隔多少周期检查消息ID是否过期:5秒
4040
* </pre>
4141
*/
42-
public WxMsgIdMemoryDuplicateChecker() {
42+
public WxMessageInMemoryDuplicateChecker() {
4343
this.timeToLive = 15 * 1000l;
4444
this.clearPeriod = 5 * 1000l;
4545
}
@@ -49,7 +49,7 @@ public WxMsgIdMemoryDuplicateChecker() {
4949
* @param timeToLive 一个消息ID在内存的过期时间:毫秒
5050
* @param clearPeriod 每隔多少周期检查消息ID是否过期:毫秒
5151
*/
52-
public WxMsgIdMemoryDuplicateChecker(Long timeToLive, Long clearPeriod) {
52+
public WxMessageInMemoryDuplicateChecker(Long timeToLive, Long clearPeriod) {
5353
this.timeToLive = timeToLive;
5454
this.clearPeriod = clearPeriod;
5555
}

weixin-java-common/src/test/java/me/chanjar/weixin/common/util/WxMsgIdMemoryDuplicateCheckerTest.java renamed to weixin-java-common/src/test/java/me/chanjar/weixin/common/util/WxMessageInMemoryDuplicateCheckerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
import org.testng.annotations.Test;
55

66
@Test
7-
public class WxMsgIdMemoryDuplicateCheckerTest {
7+
public class WxMessageInMemoryDuplicateCheckerTest {
88

99
public void test() throws InterruptedException {
1010
Long[] msgIds = new Long[] { 1l, 2l, 3l, 4l, 5l, 6l, 7l, 8l };
11-
WxMsgIdMemoryDuplicateChecker checker = new WxMsgIdMemoryDuplicateChecker(2000l, 1000l);
11+
WxMessageInMemoryDuplicateChecker checker = new WxMessageInMemoryDuplicateChecker(2000l, 1000l);
1212

1313
// 第一次检查
1414
for (Long msgId : msgIds) {

weixin-java-common/src/test/resources/testng.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<class name="me.chanjar.weixin.common.bean.WxErrorTest"/>
88
<class name="me.chanjar.weixin.common.bean.WxMenuTest"/>
99
<class name="me.chanjar.weixin.common.util.crypto.WxCryptUtilTest"/>
10-
<class name="me.chanjar.weixin.common.util.WxMsgIdMemoryDuplicateCheckerTest"/>
10+
<class name="me.chanjar.weixin.common.util.WxMessageInMemoryDuplicateCheckerTest"/>
1111
</classes>
1212
</test>
1313
</suite>

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpInMemoryConfigStorage.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@ public void expireAccessToken() {
3737
this.expiresTime = 0;
3838
}
3939

40-
public void updateAccessToken(WxAccessToken accessToken) {
40+
public synchronized void updateAccessToken(WxAccessToken accessToken) {
4141
updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn());
4242
}
4343

44-
public void updateAccessToken(String accessToken, int expiresInSeconds) {
44+
public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) {
4545
this.accessToken = accessToken;
4646
this.expiresTime = System.currentTimeMillis() + (expiresInSeconds - 200) * 1000l;
4747
}

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouter.java

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package me.chanjar.weixin.cp.api;
22

3-
import me.chanjar.weixin.common.util.WxMsgIdDuplicateChecker;
4-
import me.chanjar.weixin.common.util.WxMsgIdMemoryDuplicateChecker;
3+
import me.chanjar.weixin.common.util.WxMessageDuplicateChecker;
4+
import me.chanjar.weixin.common.util.WxMessageInMemoryDuplicateChecker;
55
import me.chanjar.weixin.cp.bean.WxCpXmlMessage;
66
import me.chanjar.weixin.cp.bean.WxCpXmlOutMessage;
77

@@ -43,26 +43,20 @@
4343
*/
4444
public class WxCpMessageRouter {
4545

46-
private static final int DEFAULT_THREAD_POOL_SIZE = 20;
46+
private static final int DEFAULT_THREAD_POOL_SIZE = 100;
4747

4848
private final List<Rule> rules = new ArrayList<Rule>();
4949

5050
private final WxCpService wxCpService;
5151

5252
private ExecutorService executorService;
5353

54-
private WxMsgIdDuplicateChecker wxMsgIdDuplicateChecker;
54+
private WxMessageDuplicateChecker wxMessageDuplicateChecker;
5555

5656
public WxCpMessageRouter(WxCpService wxCpService) {
5757
this.wxCpService = wxCpService;
5858
this.executorService = Executors.newFixedThreadPool(DEFAULT_THREAD_POOL_SIZE);
59-
this.wxMsgIdDuplicateChecker = new WxMsgIdMemoryDuplicateChecker();
60-
}
61-
62-
public WxCpMessageRouter(WxCpService wxMpService, int threadPoolSize) {
63-
this.wxCpService = wxMpService;
64-
this.executorService = Executors.newFixedThreadPool(threadPoolSize);
65-
this.wxMsgIdDuplicateChecker = new WxMsgIdMemoryDuplicateChecker();
59+
this.wxMessageDuplicateChecker = new WxMessageInMemoryDuplicateChecker();
6660
}
6761

6862
/**
@@ -75,10 +69,10 @@ public void setExecutorService(ExecutorService executorService) {
7569

7670
/**
7771
* 设置自定义的WxMsgIdDuplicateChecker
78-
* @param wxMsgIdDuplicateChecker
72+
* @param wxMessageDuplicateChecker
7973
*/
80-
public void setWxMsgIdDuplicateChecker(WxMsgIdDuplicateChecker wxMsgIdDuplicateChecker) {
81-
this.wxMsgIdDuplicateChecker = wxMsgIdDuplicateChecker;
74+
public void setWxMessageDuplicateChecker(WxMessageDuplicateChecker wxMessageDuplicateChecker) {
75+
this.wxMessageDuplicateChecker = wxMessageDuplicateChecker;
8276
}
8377

8478
/**
@@ -94,7 +88,7 @@ public Rule rule() {
9488
* @param wxMessage
9589
*/
9690
public WxCpXmlOutMessage route(final WxCpXmlMessage wxMessage) {
97-
if (wxMsgIdDuplicateChecker.isDuplicate(wxMessage.getMsgId())) {
91+
if (wxMessageDuplicateChecker.isDuplicate(wxMessage.getMsgId())) {
9892
// 如果是重复消息,那么就不做处理
9993
return null;
10094
}

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInMemoryConfigStorage.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,6 @@ public void setHttp_proxy_password(String http_proxy_password) {
152152
this.http_proxy_password = http_proxy_password;
153153
}
154154

155-
156155
@Override
157156
public String toString() {
158157
return "WxMpInMemoryConfigStorage{" +
@@ -166,6 +165,8 @@ public String toString() {
166165
", http_proxy_port=" + http_proxy_port +
167166
", http_proxy_username='" + http_proxy_username + '\'' +
168167
", http_proxy_password='" + http_proxy_password + '\'' +
168+
", jsapiTicket='" + jsapiTicket + '\'' +
169+
", jsapiTicketExpiresTime='" + jsapiTicketExpiresTime + '\'' +
169170
'}';
170171
}
171172

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@
44
import me.chanjar.weixin.common.session.SessionManagerImpl;
55
import me.chanjar.weixin.common.session.WxSession;
66
import me.chanjar.weixin.common.session.WxSessionManager;
7-
import me.chanjar.weixin.common.util.WxMsgIdDuplicateChecker;
8-
import me.chanjar.weixin.common.util.WxMsgIdMemoryDuplicateChecker;
7+
import me.chanjar.weixin.common.util.WxMessageDuplicateChecker;
8+
import me.chanjar.weixin.common.util.WxMessageInMemoryDuplicateChecker;
99
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
1010
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
1111
import org.slf4j.Logger;
1212
import org.slf4j.LoggerFactory;
1313

14-
import javax.swing.text.StyledEditorKit;
1514
import java.util.ArrayList;
1615
import java.util.HashMap;
1716
import java.util.List;
@@ -52,44 +51,56 @@ public class WxMpMessageRouter {
5251

5352
protected final Logger log = LoggerFactory.getLogger(WxMpMessageRouter.class);
5453

55-
private static final int DEFAULT_THREAD_POOL_SIZE = 20;
54+
private static final int DEFAULT_THREAD_POOL_SIZE = 100;
5655

5756
private final List<Rule> rules = new ArrayList<Rule>();
5857

5958
private final WxMpService wxMpService;
6059

6160
private ExecutorService executorService;
6261

63-
private WxMsgIdDuplicateChecker wxMsgIdDuplicateChecker;
62+
private WxMessageDuplicateChecker wxMessageDuplicateChecker;
6463

65-
protected WxSessionManager sessionManager = new SessionManagerImpl();
64+
private WxSessionManager sessionManager;
6665

6766
public WxMpMessageRouter(WxMpService wxMpService) {
6867
this.wxMpService = wxMpService;
6968
this.executorService = Executors.newFixedThreadPool(DEFAULT_THREAD_POOL_SIZE);
70-
this.wxMsgIdDuplicateChecker = new WxMsgIdMemoryDuplicateChecker();
71-
}
72-
73-
public WxMpMessageRouter(WxMpService wxMpService, int threadPoolSize) {
74-
this.wxMpService = wxMpService;
75-
this.executorService = Executors.newFixedThreadPool(threadPoolSize);
76-
this.wxMsgIdDuplicateChecker = new WxMsgIdMemoryDuplicateChecker();
69+
this.wxMessageDuplicateChecker = new WxMessageInMemoryDuplicateChecker();
70+
this.sessionManager = new SessionManagerImpl();
7771
}
7872

7973
/**
80-
* 设置自定义的ExecutorService
74+
* <pre>
75+
* 设置自定义的 {@link ExecutorService}
76+
* 如果不调用该方法,默认使用 Executors.newFixedThreadPool(100)
77+
* </pre>
8178
* @param executorService
8279
*/
8380
public void setExecutorService(ExecutorService executorService) {
8481
this.executorService = executorService;
8582
}
8683

8784
/**
88-
* 设置自定义的WxMsgIdDuplicateChecker
89-
* @param wxMsgIdDuplicateChecker
85+
* <pre>
86+
* 设置自定义的 {@link me.chanjar.weixin.common.util.WxMessageDuplicateChecker}
87+
* 如果不调用该方法,默认使用 {@link me.chanjar.weixin.common.util.WxMessageInMemoryDuplicateChecker}
88+
* </pre>
89+
* @param wxMessageDuplicateChecker
90+
*/
91+
public void setWxMessageDuplicateChecker(WxMessageDuplicateChecker wxMessageDuplicateChecker) {
92+
this.wxMessageDuplicateChecker = wxMessageDuplicateChecker;
93+
}
94+
95+
/**
96+
* <pre>
97+
* 设置自定义的{@link me.chanjar.weixin.common.session.WxSessionManager}
98+
* 如果不调用该方法,默认使用 {@linke SessionManagerImpl}
99+
* </pre>
100+
* @param sessionManager
90101
*/
91-
public void setWxMsgIdDuplicateChecker(WxMsgIdDuplicateChecker wxMsgIdDuplicateChecker) {
92-
this.wxMsgIdDuplicateChecker = wxMsgIdDuplicateChecker;
102+
public void setSessionManager(WxSessionManager sessionManager) {
103+
this.sessionManager = sessionManager;
93104
}
94105

95106
/**
@@ -105,7 +116,7 @@ public Rule rule() {
105116
* @param wxMessage
106117
*/
107118
public WxMpXmlOutMessage route(final WxMpXmlMessage wxMessage) {
108-
if (wxMsgIdDuplicateChecker.isDuplicate(wxMessage.getMsgId())) {
119+
if (wxMessageDuplicateChecker.isDuplicate(wxMessage.getMsgId())) {
109120
// 如果是重复消息,那么就不做处理
110121
return null;
111122
}
@@ -167,6 +178,10 @@ public void run() {
167178
return res;
168179
}
169180

181+
/**
182+
* 对session的访问结束
183+
* @param wxMessage
184+
*/
170185
protected void sessionEndAccess(WxMpXmlMessage wxMessage) {
171186
WxSession session = sessionManager.getSession(wxMessage.getFromUserName(), false);
172187
if (session != null) {

0 commit comments

Comments
 (0)