weixin4j-server:WeixinMessageInterceptor加入weight权重接口
This commit is contained in:
parent
763b1a66b9
commit
9c01692f57
@ -602,3 +602,5 @@
|
|||||||
|
|
||||||
+ weixin4j-base:MchPayRequest抽象化
|
+ weixin4j-base:MchPayRequest抽象化
|
||||||
|
|
||||||
|
+ weixin4j-server:WeixinMessageInterceptor加入weight权重接口
|
||||||
|
|
||||||
@ -9,7 +9,6 @@ import io.netty.util.internal.logging.InternalLoggerFactory;
|
|||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -207,24 +206,13 @@ public class WeixinMessageDispatcher {
|
|||||||
if (messageHandlers == null) {
|
if (messageHandlers == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
List<WeixinMessageHandler> matchingMessageHandlers = new ArrayList<WeixinMessageHandler>();
|
WeixinMessageHandler messageHandler = null;
|
||||||
for (WeixinMessageHandler handler : messageHandlers) {
|
for (WeixinMessageHandler handler : messageHandlers) {
|
||||||
if (handler.canHandle(request, message, nodeNames)) {
|
if (handler.canHandle(request, message, nodeNames)) {
|
||||||
matchingMessageHandlers.add(handler);
|
messageHandler = handler;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (matchingMessageHandlers.isEmpty()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
Collections.sort(matchingMessageHandlers,
|
|
||||||
new Comparator<WeixinMessageHandler>() {
|
|
||||||
@Override
|
|
||||||
public int compare(WeixinMessageHandler m1,
|
|
||||||
WeixinMessageHandler m2) {
|
|
||||||
return m2.weight() - m1.weight();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
WeixinMessageHandler messageHandler = matchingMessageHandlers.get(0);
|
|
||||||
return new MessageHandlerExecutor(context, messageHandler,
|
return new MessageHandlerExecutor(context, messageHandler,
|
||||||
getMessageInterceptors());
|
getMessageInterceptors());
|
||||||
}
|
}
|
||||||
@ -246,8 +234,8 @@ public class WeixinMessageDispatcher {
|
|||||||
}
|
}
|
||||||
if (beanFactory != null) {
|
if (beanFactory != null) {
|
||||||
for (Class<?> clazz : messageHandlerClass) {
|
for (Class<?> clazz : messageHandlerClass) {
|
||||||
messageHandlerList.add(0,
|
messageHandlerList
|
||||||
(WeixinMessageHandler) beanFactory
|
.add((WeixinMessageHandler) beanFactory
|
||||||
.getBean(clazz));
|
.getBean(clazz));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -260,9 +248,8 @@ public class WeixinMessageDispatcher {
|
|||||||
Constructor<?> ctor = clazz
|
Constructor<?> ctor = clazz
|
||||||
.getDeclaredConstructor();
|
.getDeclaredConstructor();
|
||||||
ReflectionUtil.makeAccessible(ctor);
|
ReflectionUtil.makeAccessible(ctor);
|
||||||
messageHandlerList.add(0,
|
messageHandlerList.add((WeixinMessageHandler) ctor
|
||||||
(WeixinMessageHandler) ctor
|
.newInstance((Object[]) null));
|
||||||
.newInstance((Object[]) null));
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
throw new WeixinException(clazz.getName()
|
throw new WeixinException(clazz.getName()
|
||||||
+ " instantiate fail", ex);
|
+ " instantiate fail", ex);
|
||||||
@ -272,6 +259,14 @@ public class WeixinMessageDispatcher {
|
|||||||
}
|
}
|
||||||
if (messageHandlerList != null
|
if (messageHandlerList != null
|
||||||
&& !this.messageHandlerList.isEmpty()) {
|
&& !this.messageHandlerList.isEmpty()) {
|
||||||
|
Collections.sort(messageHandlerList,
|
||||||
|
new Comparator<WeixinMessageHandler>() {
|
||||||
|
@Override
|
||||||
|
public int compare(WeixinMessageHandler m1,
|
||||||
|
WeixinMessageHandler m2) {
|
||||||
|
return m2.weight() - m1.weight();
|
||||||
|
}
|
||||||
|
});
|
||||||
this.messageHandlers = this.messageHandlerList
|
this.messageHandlers = this.messageHandlerList
|
||||||
.toArray(new WeixinMessageHandler[this.messageHandlerList
|
.toArray(new WeixinMessageHandler[this.messageHandlerList
|
||||||
.size()]);
|
.size()]);
|
||||||
@ -298,8 +293,8 @@ public class WeixinMessageDispatcher {
|
|||||||
}
|
}
|
||||||
if (beanFactory != null) {
|
if (beanFactory != null) {
|
||||||
for (Class<?> clazz : messageInterceptorClass) {
|
for (Class<?> clazz : messageInterceptorClass) {
|
||||||
messageInterceptorList.add(0,
|
messageInterceptorList
|
||||||
(WeixinMessageInterceptor) beanFactory
|
.add((WeixinMessageInterceptor) beanFactory
|
||||||
.getBean(clazz));
|
.getBean(clazz));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -312,8 +307,8 @@ public class WeixinMessageDispatcher {
|
|||||||
Constructor<?> ctor = clazz
|
Constructor<?> ctor = clazz
|
||||||
.getDeclaredConstructor();
|
.getDeclaredConstructor();
|
||||||
ReflectionUtil.makeAccessible(ctor);
|
ReflectionUtil.makeAccessible(ctor);
|
||||||
messageInterceptorList.add(0,
|
messageInterceptorList
|
||||||
(WeixinMessageInterceptor) ctor
|
.add((WeixinMessageInterceptor) ctor
|
||||||
.newInstance((Object[]) null));
|
.newInstance((Object[]) null));
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
throw new WeixinException(clazz.getName()
|
throw new WeixinException(clazz.getName()
|
||||||
@ -324,6 +319,14 @@ public class WeixinMessageDispatcher {
|
|||||||
}
|
}
|
||||||
if (this.messageInterceptorList != null
|
if (this.messageInterceptorList != null
|
||||||
&& !this.messageInterceptorList.isEmpty()) {
|
&& !this.messageInterceptorList.isEmpty()) {
|
||||||
|
Collections.sort(messageInterceptorList,
|
||||||
|
new Comparator<WeixinMessageInterceptor>() {
|
||||||
|
@Override
|
||||||
|
public int compare(WeixinMessageInterceptor m1,
|
||||||
|
WeixinMessageInterceptor m2) {
|
||||||
|
return m2.weight() - m1.weight();
|
||||||
|
}
|
||||||
|
});
|
||||||
this.messageInterceptors = this.messageInterceptorList
|
this.messageInterceptors = this.messageInterceptorList
|
||||||
.toArray(new WeixinMessageInterceptor[this.messageInterceptorList
|
.toArray(new WeixinMessageInterceptor[this.messageInterceptorList
|
||||||
.size()]);
|
.size()]);
|
||||||
|
|||||||
@ -38,4 +38,8 @@ public abstract class MessageInterceptorAdapter implements
|
|||||||
WeixinMessageHandler handler, Exception exception)
|
WeixinMessageHandler handler, Exception exception)
|
||||||
throws WeixinException {
|
throws WeixinException {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int weight() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -74,4 +74,11 @@ public interface WeixinMessageInterceptor {
|
|||||||
WeixinResponse response, Object message,
|
WeixinResponse response, Object message,
|
||||||
WeixinMessageHandler handler, Exception exception)
|
WeixinMessageHandler handler, Exception exception)
|
||||||
throws WeixinException;
|
throws WeixinException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于匹配到多个MessageHandler时权重降序排列,数字越大优先级越高
|
||||||
|
*
|
||||||
|
* @return 权重
|
||||||
|
*/
|
||||||
|
int weight();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,7 +26,7 @@ import com.foxinmy.weixin4j.util.Consts;
|
|||||||
*/
|
*/
|
||||||
public class MessagePush {
|
public class MessagePush {
|
||||||
|
|
||||||
private final String server = "http://localhost:30000";
|
private final String server = "http://localhost:10003";
|
||||||
private final HttpClient httpClient;
|
private final HttpClient httpClient;
|
||||||
private final HttpPost httpPost;
|
private final HttpPost httpPost;
|
||||||
private final HttpGet httpGet;
|
private final HttpGet httpGet;
|
||||||
|
|||||||
@ -105,6 +105,11 @@ public class MessageServerStartup {
|
|||||||
Exception exception) throws WeixinException {
|
Exception exception) throws WeixinException {
|
||||||
System.err.println("请求处理完毕");
|
System.err.println("请求处理完毕");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int weight() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
new WeixinServerBootstrap(token).addInterceptor(interceptor)
|
new WeixinServerBootstrap(token).addInterceptor(interceptor)
|
||||||
.openAlwaysResponse().startup();
|
.openAlwaysResponse().startup();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user