perf: 将 jedis 订阅频道处理代码移动至异步线程处理

This commit is contained in:
2024-03-26 19:00:55 +08:00
parent 84721e31ee
commit 74f1a4557d
2 changed files with 34 additions and 29 deletions

View File

@@ -506,26 +506,28 @@ public abstract class BallAPI {
* <p> * <p>
* 会自动加上 config 中设置的频道前缀 * 会自动加上 config 中设置的频道前缀
* *
* @param channel 频道名称 * @param channels 频道名称
*/ */
public void subscribe(@NotNull String... channel) { public void subscribe(@NotNull String... channels) {
for (int i = 0; i < channel.length; i++) { for (int i = 0; i < channels.length; i++) {
channel[i] = ballConfig.getChannelPrefix() + channel[i]; channels[i] = ballConfig.getChannelPrefix() + channels[i];
} }
CoreAPI.getInstance().getExecutorService().submit( subscribeRaw(channels);
() -> redisSub.subscribe(BallRedisListener.INSTANCE, channel)
);
} }
/** /**
* 忽略频道前缀配置,订阅 redis 消息频道 * 忽略频道前缀配置,订阅 redis 消息频道
* *
* @param channel 频道名称 * @param channels 频道名称
*/ */
public void subscribeRaw(@NotNull String... channel) { public void subscribeRaw(@NotNull String... channels) {
CoreAPI.getInstance().getExecutorService().submit( CoreAPI.getInstance().getExecutorService().submit(() -> {
() -> redisSub.subscribe(BallRedisListener.INSTANCE, channel) try {
); redisSub.subscribe(BallRedisListener.INSTANCE, channels);
} catch (Exception | Error e) {
e.printStackTrace();
}
});
} }
/** /**

View File

@@ -15,23 +15,26 @@ public class BallRedisListener extends JedisPubSub {
@Override @Override
public void onMessage(String channel, String message) { public void onMessage(String channel, String message) {
if (channel.startsWith(BallAPI.getInstance().getBallConfig().getChannelPrefix())) { CoreAPI.getInstance().getExecutorService().submit(() -> {
channel = channel.substring(BallAPI.getInstance().getBallConfig().getChannelPrefix().length()); try {
} String finalChannel = channel;
BallMessage ballMessage = CoreAPI.getInstance().getGson().fromJson(message, BallMessage.class); if (finalChannel.startsWith(BallAPI.getInstance().getBallConfig().getChannelPrefix())) {
BallAPI ballAPI = BallAPI.getInstance(); finalChannel = finalChannel.substring(BallAPI.getInstance().getBallConfig().getChannelPrefix().length());
EventBus eventBus = ballAPI.getEventBus(); }
if (ballMessage.getReceiverType() != null && ballMessage.getReceiverType() != ballAPI.getLocalServerInfo().getType()) { BallMessage ballMessage = CoreAPI.getInstance().getGson().fromJson(message, BallMessage.class);
return; BallAPI ballAPI = BallAPI.getInstance();
} EventBus eventBus = ballAPI.getEventBus();
if (ballMessage.getReceiverID() != null && !ballAPI.isLocalServer(ballMessage.getReceiverID())) { if (ballMessage.getReceiverType() != null && ballMessage.getReceiverType() != ballAPI.getLocalServerInfo().getType()) {
return; return;
} }
try { if (ballMessage.getReceiverID() != null && !ballAPI.isLocalServer(ballMessage.getReceiverID())) {
eventBus.post(new MessageReceivedEvent(channel, ballMessage)); return;
} catch (Exception | Error e) { }
e.printStackTrace(); eventBus.post(new MessageReceivedEvent(finalChannel, ballMessage));
} } catch (Exception | Error e) {
e.printStackTrace();
}
});
} }
@Override @Override