doc[module]:Event模块注册注释

This commit is contained in:
jianan
2022-07-09 21:50:57 +08:00
parent 14aff7b6e7
commit 92afa4a3ff
3 changed files with 26 additions and 3 deletions
@@ -36,14 +36,15 @@ public abstract class EventBus {
private static final Logger logger = LoggerFactory.getLogger(EventBus.class);
// 线程池的大小
/**
* 线程池的大小. event的线程池比较大
*/
public static final int EXECUTORS_SIZE = Runtime.getRuntime().availableProcessors() * 2;
private static final ExecutorService[] executors = new ExecutorService[EXECUTORS_SIZE];
private static final Map<Class<? extends IEvent>, List<IEventReceiver>> receiverMap = new HashMap<>();
static {
for (int i = 0; i < executors.length; i++) {
var namedThreadFactory = new EventThreadFactory(i + 1);
@@ -85,16 +86,28 @@ public abstract class EventBus {
}
/**
* 随机获取一个线程
* 随机获取一个线程
*/
public static Executor asyncExecute() {
return executors[RandomUtils.randomInt(EXECUTORS_SIZE)];
}
/**
* 用指定线程执行
*
* @param hashcode
* @return
*/
public static Executor execute(int hashcode) {
return executors[Math.abs(hashcode % EXECUTORS_SIZE)];
}
/**
* 执行方法调用
*
* @param event 事件
* @param receiverList 所有的观察者
*/
private static void doSubmit(IEvent event, List<IEventReceiver> receiverList) {
for (var receiver : receiverList) {
try {
@@ -107,6 +120,12 @@ public abstract class EventBus {
}
}
/**
* 注册事件及其对应观察者
*
* @param eventType
* @param receiver
*/
public static void registerEventReceiver(Class<? extends IEvent> eventType, IEventReceiver receiver) {
receiverMap.computeIfAbsent(eventType, it -> new LinkedList<>()).add(receiver);
}
@@ -81,6 +81,8 @@ public class EventRegisterProcessor implements BeanPostProcessor {
var receiverDefinition = new EventReceiverDefinition(bean, method, eventClazz);
var enhanceReceiverDefinition = EnhanceUtils.createEventReceiver(receiverDefinition);
// key:class类型 value:观察者 注册Event的receiverMap中
EventBus.registerEventReceiver(eventClazz, enhanceReceiverDefinition);
}
} catch (Throwable t) {
@@ -32,6 +32,8 @@ public interface IConsumer {
/**
* 直接发送,不需要任何返回值
* <p>
* 例子:参考 com.zfoo.app.zapp.chat.controller。FrinedController 的 atApplyFriendRequest方法,客户端发起申请请求,chat服务处理后,再把消息直接发给网关
*
* @param packet 需要发送的包
* @param argument 计算负载均衡的参数,比如用户的id