优化资源释放
This commit is contained in:
parent
a83af4ba9f
commit
fbba69a28f
|
|
@ -2,6 +2,8 @@ package org.jetlinks.community.network.http.server.vertx;
|
|||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import io.netty.buffer.UnpooledHeapByteBuf;
|
||||
import io.netty.util.ReferenceCountUtil;
|
||||
import io.vertx.core.MultiMap;
|
||||
import io.vertx.core.buffer.Buffer;
|
||||
import io.vertx.core.http.HttpMethod;
|
||||
|
|
@ -224,7 +226,12 @@ public class VertxHttpExchange implements HttpExchange, HttpResponse, HttpReques
|
|||
.<Void>create(sink -> {
|
||||
Buffer buf = Buffer.buffer(buffer);
|
||||
setResponseDefaultLength(buf.length());
|
||||
response.write(buf, v -> sink.success());
|
||||
response.write(buf, v -> {
|
||||
sink.success();
|
||||
if(!(buffer instanceof UnpooledHeapByteBuf)){
|
||||
ReferenceCountUtil.safeRelease(buffer);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
package org.jetlinks.community.network.mqtt.client;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.handler.codec.mqtt.MqttQoS;
|
||||
import io.netty.util.ReferenceCountUtil;
|
||||
import io.vertx.core.buffer.Buffer;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
|
@ -199,19 +201,24 @@ public class VertxMqttClient implements MqttClient {
|
|||
|
||||
private Mono<Void> doPublish(MqttMessage message) {
|
||||
return Mono.create((sink) -> {
|
||||
Buffer buffer = Buffer.buffer(message.getPayload());
|
||||
ByteBuf payload = message.getPayload();
|
||||
Buffer buffer = Buffer.buffer(payload);
|
||||
client.publish(message.getTopic(),
|
||||
buffer,
|
||||
MqttQoS.valueOf(message.getQosLevel()),
|
||||
message.isDup(),
|
||||
message.isRetain(),
|
||||
result -> {
|
||||
if (result.succeeded()) {
|
||||
log.info("publish mqtt [{}] message success: {}", client.clientId(), message);
|
||||
sink.success();
|
||||
} else {
|
||||
log.info("publish mqtt [{}] message error : {}", client.clientId(), message, result.cause());
|
||||
sink.error(result.cause());
|
||||
try {
|
||||
if (result.succeeded()) {
|
||||
log.info("publish mqtt [{}] message success: {}", client.clientId(), message);
|
||||
sink.success();
|
||||
} else {
|
||||
log.info("publish mqtt [{}] message error : {}", client.clientId(), message, result.cause());
|
||||
sink.error(result.cause());
|
||||
}
|
||||
} finally {
|
||||
ReferenceCountUtil.safeRelease(payload);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import io.netty.buffer.Unpooled;
|
|||
import io.netty.handler.codec.DecoderException;
|
||||
import io.netty.handler.codec.mqtt.MqttConnectReturnCode;
|
||||
import io.netty.handler.codec.mqtt.MqttQoS;
|
||||
import io.netty.util.ReferenceCountUtil;
|
||||
import io.vertx.core.buffer.Buffer;
|
||||
import io.vertx.core.net.SocketAddress;
|
||||
import io.vertx.mqtt.MqttEndpoint;
|
||||
|
|
@ -32,6 +33,7 @@ import java.time.Duration;
|
|||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
|
|
@ -41,7 +43,7 @@ class VertxMqttConnection implements MqttConnection {
|
|||
private long keepAliveTimeoutMs;
|
||||
@Getter
|
||||
private long lastPingTime = System.currentTimeMillis();
|
||||
private volatile boolean closed = false, accepted = false, autoAckSub = true, autoAckUnSub = true, autoAckMsg = false;
|
||||
private volatile boolean closed = false, accepted = false, autoAckSub = true, autoAckUnSub = true, autoAckMsg = true;
|
||||
private static final MqttAuth emptyAuth = new MqttAuth() {
|
||||
@Override
|
||||
public String getUsername() {
|
||||
|
|
@ -259,19 +261,22 @@ class VertxMqttConnection implements MqttConnection {
|
|||
ping();
|
||||
return Mono
|
||||
.<Void>create(sink -> {
|
||||
Buffer buffer = Buffer.buffer(message.getPayload());
|
||||
endpoint.publish(message.getTopic(),
|
||||
buffer,
|
||||
MqttQoS.valueOf(message.getQosLevel()),
|
||||
message.isDup(),
|
||||
message.isRetain(),
|
||||
result -> {
|
||||
if (result.succeeded()) {
|
||||
sink.success();
|
||||
} else {
|
||||
sink.error(result.cause());
|
||||
}
|
||||
}
|
||||
ByteBuf buf = message.getPayload();
|
||||
Buffer buffer = Buffer.buffer(buf);
|
||||
endpoint.publish(
|
||||
message.getTopic(),
|
||||
buffer,
|
||||
MqttQoS.valueOf(message.getQosLevel()),
|
||||
message.isDup(),
|
||||
message.isRetain(),
|
||||
result -> {
|
||||
if (result.succeeded()) {
|
||||
sink.success();
|
||||
} else {
|
||||
sink.error(result.cause());
|
||||
}
|
||||
ReferenceCountUtil.safeRelease(buf);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue