gpt4 book ai didi

java - Cassandra、Jersey Rest api 会随着每个 Rest 请求而增加线程、内存使用量和端口

转载 作者:行者123 更新时间:2023-12-02 03:04:42 24 4
gpt4 key购买 nike

我创建了简单的 Jersey 休息 API 来查询 cassandra。还使用 Ajax 长轮询。但是,随着每次请求,内存、端口使用率和线程都会增加,即使在请求完成后,这些也不会减少。也关闭了 cassandra session ,但没有运气。下面是其余代码

@Path("/pull")
@GET
@Produces(MediaType.APPLICATION_JSON)
public JSONArray get(@QueryParam("offset") String offset, @QueryParam("currentUser") String currentUser,
@QueryParam("longPolling") boolean longPolling) {
JSONArray messages = new JSONArray();
JSONObject message = null;
Session session = Connector.getSession();
String query = "SELECT * FROM messages";
ResultSet resultSet = null;
PreparedStatement ps = null;
BoundStatement stmt = null;
int timeOut = 0;
try {
while (messages.length() == 0 && timeOut++ < 30) {
if (longPolling && !offset.equals("0")) {
query = "SELECT * FROM messages WHERE id > ? ALLOW FILTERING";
ps = session.prepare(query);
stmt = ps.bind(UUID.fromString(offset));
resultSet = session.execute(stmt);
} else {
resultSet = session.execute(query);
}
List<Row> ls = resultSet.all();
ls.sort(new Sort<Row>());
for (Row row : ls) {
if ((!longPolling || !row.getString("sentby").equals(currentUser))) {
message = new JSONObject();
message.put("id", row.getUUID("id"));
message.put("sentby", row.getString("sentby"));
message.put("message", row.getString("message"));
messages.put(message);
}
}
if (messages.length() == 0 && longPolling) {
Thread.sleep(1000);
}
}
} catch (JSONException | InterruptedException e) {
e.printStackTrace();
} finally {
message = null;
resultSet = null;
session.close();
}
return messages;
}

最佳答案

我认为主要问题是您每次都在初始化 session 并将其拆除。 Session 是一个相对较重的对象,每个应用程序只能使用一个。请将 session 放入其他某个 bean,然后在此处的代码中使用依赖项注入(inject)来获取它。不要根据请求打开和关闭 session 。这肯定不会有性能。

也不要每次都准备报表。在您的这个 bean 上仅创建一个准备好的语句并在请求之间使用它。

关于java - Cassandra、Jersey Rest api 会随着每个 Rest 请求而增加线程、内存使用量和端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41887689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com