|
@@ -83,31 +83,39 @@ class ProxyMessageListener implements MessageListener {
|
|
log.warn("TopicMessage已弃用,请替换为TopicPayload! {}", method);
|
|
log.warn("TopicMessage已弃用,请替换为TopicPayload! {}", method);
|
|
return TopicMessageWrap.wrap(message);
|
|
return TopicMessageWrap.wrap(message);
|
|
}
|
|
}
|
|
- Payload payload = message.getPayload();
|
|
|
|
- Object decodedPayload;
|
|
|
|
- if (payload instanceof NativePayload) {
|
|
|
|
- decodedPayload = ((NativePayload<?>) payload).getNativeObject();
|
|
|
|
- } else {
|
|
|
|
- if (decoder == null) {
|
|
|
|
- decoder = Codecs.lookup(resolvableType);
|
|
|
|
|
|
+ try {
|
|
|
|
+ Payload payload = message.getPayload();
|
|
|
|
+ Object decodedPayload;
|
|
|
|
+ if (payload instanceof NativePayload) {
|
|
|
|
+ decodedPayload = ((NativePayload<?>) payload).getNativeObject();
|
|
|
|
+ } else {
|
|
|
|
+ if (decoder == null) {
|
|
|
|
+ decoder = Codecs.lookup(resolvableType);
|
|
|
|
+ }
|
|
|
|
+ decodedPayload = decoder.decode(message);
|
|
}
|
|
}
|
|
- decodedPayload = decoder.decode(message);
|
|
|
|
- }
|
|
|
|
- if (paramType.isInstance(decodedPayload)) {
|
|
|
|
- return decodedPayload;
|
|
|
|
|
|
+ if (paramType.isInstance(decodedPayload)) {
|
|
|
|
+ return decodedPayload;
|
|
|
|
+ }
|
|
|
|
+ return FastBeanCopier.DEFAULT_CONVERT.convert(decodedPayload, paramType, resolvableType.resolveGenerics());
|
|
|
|
+ } finally {
|
|
|
|
+ message.release();
|
|
}
|
|
}
|
|
-
|
|
|
|
- return FastBeanCopier.DEFAULT_CONVERT.convert(decodedPayload, paramType, resolvableType.resolveGenerics());
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public Mono<Void> onMessage(TopicPayload message) {
|
|
public Mono<Void> onMessage(TopicPayload message) {
|
|
- return Mono.defer(() -> {
|
|
|
|
- Object val = proxy.apply(target, paramType == Void.class ? null : convert(message));
|
|
|
|
|
|
+ boolean paramVoid = paramType == Void.class;
|
|
|
|
+ try {
|
|
|
|
+ Object val = proxy.apply(target, paramVoid ? null : convert(message));
|
|
if (val instanceof Publisher) {
|
|
if (val instanceof Publisher) {
|
|
return Mono.from((Publisher<?>) val).then();
|
|
return Mono.from((Publisher<?>) val).then();
|
|
}
|
|
}
|
|
return Mono.empty();
|
|
return Mono.empty();
|
|
- });
|
|
|
|
|
|
+ } finally {
|
|
|
|
+ if (paramVoid) {
|
|
|
|
+ message.release();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|