This commit is contained in:
Redkale
2020-10-02 00:19:04 +08:00
parent 9c5e23090c
commit 3eaecacac0
4 changed files with 15 additions and 4 deletions

View File

@@ -78,11 +78,12 @@ public class HttpMessageProcessor implements MessageProcessor {
}
private void execute(final MessageRecord message, final Runnable callback) {
HttpMessageRequest request = null;
try {
if (finest) logger.log(Level.FINEST, "HttpMessageProcessor.process message: " + message);
if (multiconsumer) message.setResptopic(null); //不容许有响应
HttpContext context = server.getHttpServer().getContext();
HttpMessageRequest request = new HttpMessageRequest(context, message);
request = new HttpMessageRequest(context, message);
if (multiconsumer) {
request.setRequestURI(request.getRequestURI().replaceFirst(this.multimodule, this.restmodule));
}
@@ -90,7 +91,8 @@ public class HttpMessageProcessor implements MessageProcessor {
servlet.execute(request, response);
} catch (Throwable ex) {
if (message.getResptopic() != null && !message.getResptopic().isEmpty()) {
HttpMessageResponse.finishHttpResult(finest, message, callback, producer.getProducer(message), message.getResptopic(), new HttpResult().status(500));
HttpMessageResponse.finishHttpResult(finest, request == null ? null : request.getRespConvert(),
message, callback, producer.getProducer(message), message.getResptopic(), new HttpResult().status(500));
}
logger.log(Level.SEVERE, HttpMessageProcessor.class.getSimpleName() + " process error, message=" + message, ex instanceof CompletionException ? ((CompletionException) ex).getCause() : ex);
}

View File

@@ -5,6 +5,7 @@
*/
package org.redkale.mq;
import org.redkale.convert.Convert;
import org.redkale.net.http.*;
/**
@@ -30,4 +31,8 @@ public class HttpMessageRequest extends HttpRequest {
this.requestURI = uri;
}
@Override
public Convert getRespConvert() {
return this.respConvert;
}
}

View File

@@ -51,10 +51,10 @@ public class HttpMessageResponse extends HttpResponse {
}
public void finishHttpResult(HttpResult result) {
finishHttpResult(this.finest, this.message, this.callback, this.producer, message.getResptopic(), result);
finishHttpResult(this.finest, ((HttpMessageRequest) this.request).getRespConvert(), this.message, this.callback, this.producer, message.getResptopic(), result);
}
public static void finishHttpResult(boolean finest, MessageRecord msg, Runnable callback, MessageProducer producer, String resptopic, HttpResult result) {
public static void finishHttpResult(boolean finest, Convert respConvert, MessageRecord msg, Runnable callback, MessageProducer producer, String resptopic, HttpResult result) {
if (callback != null) callback.run();
if (resptopic == null || resptopic.isEmpty()) return;
if (result.getResult() instanceof RetResult) {
@@ -62,6 +62,7 @@ public class HttpMessageResponse extends HttpResponse {
//必须要塞入retcode 开发者可以无需反序列化ret便可确定操作是否返回成功
if (!ret.isSuccess()) result.header("retcode", String.valueOf(ret.getRetcode()));
}
if (result.convert() == null && respConvert != null) result.convert(respConvert);
if (finest) {
Object innerrs = result.getResult();
if (innerrs instanceof byte[]) innerrs = new String((byte[]) innerrs, StandardCharsets.UTF_8);

View File

@@ -616,6 +616,9 @@ public class HttpRequest extends Request<HttpContext> {
public String toString() {
parseBody();
return this.getClass().getSimpleName() + "{\r\n method: " + this.method + ", \r\n requestURI: " + this.requestURI
+ (this.frombody ? (", \r\n frombody: " + this.frombody) : "")
+ (this.reqConvert != null ? (", \r\n reqConvert: " + this.reqConvert.getClass().getSimpleName()) : "")
+ (this.respConvert != null ? (", \r\n respConvert: " + this.respConvert.getClass().getSimpleName()) : "")
+ ", \r\n remoteAddr: " + this.getRemoteAddr() + ", \r\n cookies: " + this.cookie + ", \r\n contentType: " + this.contentType
+ ", \r\n connection: " + this.connection + ", \r\n protocol: " + this.protocol + ", \r\n host: " + this.host
+ ", \r\n contentLength: " + this.contentLength + ", \r\n bodyLength: " + this.array.size() + (this.boundary || this.array.isEmpty() ? "" : (", \r\n bodyContent: " + this.getBodyUTF8()))