perf: 将 jedis 订阅频道处理代码移动至异步线程处理
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user