Browse Source

modify

master
Daniel Qian 10 years ago
parent
commit
8c80ca25b6
2 changed files with 12 additions and 13 deletions
  1. +8
    -8
      weixin-java-common/src/main/java/me/chanjar/weixin/common/util/WxMsgIdInMemoryDuplicateChecker.java
  2. +4
    -5
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java

+ 8
- 8
weixin-java-common/src/main/java/me/chanjar/weixin/common/util/WxMsgIdInMemoryDuplicateChecker.java View File

@@ -14,12 +14,12 @@ public class WxMsgIdInMemoryDuplicateChecker implements WxMsgIdDuplicateChecker
/** /**
* 一个消息ID在内存的过期时间:15秒 * 一个消息ID在内存的过期时间:15秒
*/ */
private final Long TIME_TO_LIVE;
private final Long timeToLive;


/** /**
* 每隔多少周期检查消息ID是否过期:5秒 * 每隔多少周期检查消息ID是否过期:5秒
*/ */
private final Long CLEAR_PERIOD;
private final Long clearPeriod;


private final ConcurrentHashMap<Long, Long> msgId2Timestamp = new ConcurrentHashMap<Long, Long>(); private final ConcurrentHashMap<Long, Long> msgId2Timestamp = new ConcurrentHashMap<Long, Long>();


@@ -31,8 +31,8 @@ public class WxMsgIdInMemoryDuplicateChecker implements WxMsgIdDuplicateChecker
* </pre> * </pre>
*/ */
public WxMsgIdInMemoryDuplicateChecker() { public WxMsgIdInMemoryDuplicateChecker() {
this.TIME_TO_LIVE = 15 * 1000l;
this.CLEAR_PERIOD = 5 * 1000l;
this.timeToLive = 15 * 1000l;
this.clearPeriod = 5 * 1000l;
this.start(); this.start();
} }


@@ -42,8 +42,8 @@ public class WxMsgIdInMemoryDuplicateChecker implements WxMsgIdDuplicateChecker
* @param clearPeriod 每隔多少周期检查消息ID是否过期:毫秒 * @param clearPeriod 每隔多少周期检查消息ID是否过期:毫秒
*/ */
public WxMsgIdInMemoryDuplicateChecker(Long timeToLive, Long clearPeriod) { public WxMsgIdInMemoryDuplicateChecker(Long timeToLive, Long clearPeriod) {
this.TIME_TO_LIVE = timeToLive;
this.CLEAR_PERIOD = clearPeriod;
this.timeToLive = timeToLive;
this.clearPeriod = clearPeriod;
this.start(); this.start();
} }


@@ -53,10 +53,10 @@ public class WxMsgIdInMemoryDuplicateChecker implements WxMsgIdDuplicateChecker
public void run() { public void run() {
try { try {
while (true) { while (true) {
Thread.sleep(CLEAR_PERIOD);
Thread.sleep(clearPeriod);
Long now = System.currentTimeMillis(); Long now = System.currentTimeMillis();
for (Map.Entry<Long, Long> entry : msgId2Timestamp.entrySet()) { for (Map.Entry<Long, Long> entry : msgId2Timestamp.entrySet()) {
if (now - entry.getValue() > TIME_TO_LIVE) {
if (now - entry.getValue() > timeToLive) {
msgId2Timestamp.entrySet().remove(entry); msgId2Timestamp.entrySet().remove(entry);
} }
} }


+ 4
- 5
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java View File

@@ -39,19 +39,18 @@ import java.io.StringReader;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;


public class WxMpServiceImpl implements WxMpService { public class WxMpServiceImpl implements WxMpService {


/** /**
* 全局的是否正在刷新access token的锁 * 全局的是否正在刷新access token的锁
*/ */
protected static final Object GLOBAL_ACCESS_TOKEN_REFRESH_LOCK = new Object();
protected final Object globalAccessTokenRefreshLock = new Object();


/** /**
* 全局的是否正在刷新jsapi_ticket的锁 * 全局的是否正在刷新jsapi_ticket的锁
*/ */
protected static final Object GLOBAL_JSAPI_TICKET_REFRESH_LOCK = new Object();
protected final Object globalJsapiTicketRefreshLock = new Object();


protected WxMpConfigStorage wxMpConfigStorage; protected WxMpConfigStorage wxMpConfigStorage;
@@ -78,7 +77,7 @@ public class WxMpServiceImpl implements WxMpService {
wxMpConfigStorage.expireAccessToken(); wxMpConfigStorage.expireAccessToken();
} }
if (wxMpConfigStorage.isAccessTokenExpired()) { if (wxMpConfigStorage.isAccessTokenExpired()) {
synchronized (GLOBAL_ACCESS_TOKEN_REFRESH_LOCK) {
synchronized (globalAccessTokenRefreshLock) {
if (wxMpConfigStorage.isAccessTokenExpired()) { if (wxMpConfigStorage.isAccessTokenExpired()) {
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential"
+ "&appid=" + wxMpConfigStorage.getAppId() + "&appid=" + wxMpConfigStorage.getAppId()
@@ -119,7 +118,7 @@ public class WxMpServiceImpl implements WxMpService {
wxMpConfigStorage.expireJsapiTicket(); wxMpConfigStorage.expireJsapiTicket();
} }
if (wxMpConfigStorage.isJsapiTicketExpired()) { if (wxMpConfigStorage.isJsapiTicketExpired()) {
synchronized (GLOBAL_JSAPI_TICKET_REFRESH_LOCK) {
synchronized (globalJsapiTicketRefreshLock) {
if (wxMpConfigStorage.isJsapiTicketExpired()) { if (wxMpConfigStorage.isJsapiTicketExpired()) {
String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi"; String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi";
String responseContent = execute(new SimpleGetRequestExecutor(), url, null); String responseContent = execute(new SimpleGetRequestExecutor(), url, null);


Loading…
Cancel
Save