/**
* 注册广播事件处理器(带死信队列配置)
*
* @param topic 订阅的主题名称
* @param handler 事件处理器实例
* @param executor 业务处理线程池
* @param dlqConfig 死信队列配置
*/
public void registerBroadcast(@Nonnull String topic, @Nonnull EventHandler handler,
@Nonnull ExecutorService executor, @Nonnull DLQConfig dlqConfig) {
String groupId = idGenerator.createGroupId(topic);
registerUnicast(topic, groupId, handler, executor, null, dlqConfig);
}
/**
* 注册处理广播事件的handler groupId使用UUID随机生成,确保唯一性。
*
* @param topic 主题
* @param handler 事件处理类
* @param executorService 上层传递的处理业务的线程池
* @param partitionAssignorMode 分区分配策略
*/
@Override
public void registerBroadcast(@Nonnull String topic, @Nonnull EventHandler handler,
@Nonnull ExecutorService executorService,
PartitionAssignorMode partitionAssignorMode) {
String groupId = idGenerator.createGroupId(topic);
registerUnicast(topic, groupId, handler, executorService, partitionAssignorMode);
}
/**
* 注册广播事件处理器(自定义分区策略+死信队列)
*
* @param topic 订阅的主题名称
* @param handler 事件处理器实例
* @param executorService 业务处理线程池
* @param partitionAssignorMode 分区分配策略
* @param dlqConfig 死信队列配置
*/
public void registerBroadcast(@Nonnull String topic, @Nonnull EventHandler handler,
@Nonnull ExecutorService executorService,
@Nonnull PartitionAssignorMode partitionAssignorMode,
@Nonnull DLQConfig dlqConfig) {
String groupId = idGenerator.createGroupId(topic);
registerUnicast(topic, groupId, handler, executorService, partitionAssignorMode, dlqConfig);
}
/**
* 注册处理单播事件的handler 一个topic对应一个consumerId
*
* @param topic 主题
* @param groupId 消费者组Id,在同一个组里的消费者实现单播消费
* @param handler 事件处理类
* @param executor 上层传递的用于业务处理的线程池
*/
@Override
public void registerUnicast(@Nonnull String topic, @Nonnull String groupId, @Nonnull EventHandler handler,
@Nonnull ExecutorService executor) {
registerUnicast(topic, groupId, handler, executor, (PartitionAssignorMode) null);
}
/**
* 注册单播事件处理器(带死信队列配置)
*
* @param topic 订阅的主题名称
* @param groupId 消费者组ID
* @param handler 事件处理器实例
* @param executor 业务处理线程池
* @param dlqConfig 死信队列配置
*/
public void registerUnicast(@Nonnull String topic, @Nonnull String groupId, @Nonnull EventHandler handler,
@Nonnull ExecutorService executor, @Nonnull DLQConfig dlqConfig) {
registerUnicast(topic, groupId, handler, executor, null,dlqConfig);
}
/**
* 注册处理单播Topic消息的handler,
*
* @param topic 主题
* @param groupId 消费者组Id
* @param handler 事件处理类
* @param executorService 上层传递的处理业务的线程池
* @param partitionAssignorMode 分区分配策略
*/
@Override
public void registerUnicast(@Nonnull String topic, @Nonnull String groupId, @Nonnull EventHandler handler,
@Nonnull ExecutorService executorService,
PartitionAssignorMode partitionAssignorMode) {
partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode);
register(topic, groupId, handler, executorService, partitionAssignorMode);
}
/**
* 注册单播事件处理器(自定义分区策略+死信队列)
*
* @param topic 订阅的主题名称
* @param groupId 消费者组ID
* @param handler 事件处理器实例
* @param executorService 业务处理线程池
* @param partitionAssignorMode 分区分配策略
* @param dlqConfig 死信队列配置
*/
public void registerUnicast(@Nonnull String topic, @Nonnull String groupId, @Nonnull EventHandler handler,
@Nonnull ExecutorService executorService,
PartitionAssignorMode partitionAssignorMode, @Nonnull DLQConfig dlqConfig) {
partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode);
EventHandler wrappedHandler = new DLQEventHandlerWrapper(handler, dlqConfig, topic,this);
register(topic, groupId, wrappedHandler, executorService, partitionAssignorMode);
}
/**
* 注册处理广播Topic消息的无业务线程池的Handler
*
* @param topic 主题
* @param handler 事件处理类
* @param partitionAssignorMode 分区分配策略
*/
@Override
public void registerBroadcastWithoutThreadPool(@Nonnull String topic, @Nonnull EventHandler handler,
PartitionAssignorMode partitionAssignorMode) {
String groupId = idGenerator.createGroupId(topic);
registerUnicastWithoutThreadPool(topic, groupId, handler, partitionAssignorMode);
}
/**
* 注册无线程池的广播处理器(自定义分区策略+死信队列)
*
* @param topic 订阅的主题名称
* @param handler 事件处理器实例
* @param partitionAssignorMode 分区分配策略
* @param dlqConfig 死信队列配置
*/
public void registerBroadcastWithoutThreadPool(@Nonnull String topic, @Nonnull EventHandler handler,
@Nonnull PartitionAssignorMode partitionAssignorMode,
@Nonnull DLQConfig dlqConfig) {
String groupId = idGenerator.createGroupId(topic);
registerUnicastWithoutThreadPool(topic, groupId, handler, partitionAssignorMode, dlqConfig);
}
/**
* 注册处理单播Topic消息的无业务线程池的Handler
*
* @param topic 主题
* @param groupId 消费者组
* @param handler 事件处理类
* @param partitionAssignorMode 分区分配策略
*/
@Override
public void registerUnicastWithoutThreadPool(@Nonnull String topic, @Nonnull String groupId,
@Nonnull EventHandler handler,
PartitionAssignorMode partitionAssignorMode) {
partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode);
register(topic, groupId, handler, null, partitionAssignorMode);
}
/**
* 注册无线程池的单播处理器(自定义分区策略+死信队列)
*
* @param topic 订阅的主题名称
* @param groupId 消费者组ID
* @param handler 事件处理器实例
* @param partitionAssignorMode 分区分配策略
* @param dlqConfig 死信队列配置
*/
public void registerUnicastWithoutThreadPool(@Nonnull String topic, @Nonnull String groupId,
@Nonnull EventHandler handler,
@Nonnull PartitionAssignorMode partitionAssignorMode,
@Nonnull DLQConfig dlqConfig) {
partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode);
// 包装Handler,添加DLQ逻辑
EventHandler wrappedHandler = new DLQEventHandlerWrapper(handler, dlqConfig, topic,this);
// 调用核心注册(executorService传null,无线程池)
register(topic, groupId, wrappedHandler, null, partitionAssignorMode);
}以上是我已经完成带死信重载的注册方法,请仿照我的方法修改后续注册方法 @Override
public <T> void registerBroadcastGenerically(@Nonnull String topic, @Nonnull GenericEventHandler<T> handler,
@Nonnull ExecutorService executor, @NonNull Class<T> clazz) {
String groupId = idGenerator.createGroupId(topic);
registerUnicastGenerically(topic, groupId, handler, executor, clazz);
}
/**
* 注册处理广播事件的handler groupId使用UUID随机生成,确保唯一性。
*
* @param topic 主题
* @param handler 事件处理类
* @param executorService 上层传递的处理业务的线程池
* @param partitionAssignorMode 分区分配策略
*/
@Override
public <T> void registerBroadcastGenerically(@Nonnull String topic, @Nonnull GenericEventHandler<T> handler,
@Nonnull ExecutorService executorService,
PartitionAssignorMode partitionAssignorMode, @NonNull Class<T> clazz) {
String groupId = idGenerator.createGroupId(topic);
registerUnicastGenerically(topic, groupId, handler, executorService, partitionAssignorMode, clazz);
}
/**
* 注册处理单播事件的handler 一个topic对应一个consumerId
*
* @param topic 主题
* @param groupId 消费者组Id,在同一个组里的消费者实现单播消费
* @param handler 事件处理类
* @param executor 上层传递的用于业务处理的线程池
*/
@Override
public <T> void registerUnicastGenerically(@Nonnull String topic, @Nonnull String groupId,
@Nonnull GenericEventHandler<T> handler,
@Nonnull ExecutorService executor, @NonNull Class<T> clazz) {
registerUnicastGenerically(topic, groupId, handler, executor, null, clazz);
}
/**
* 注册处理单播Topic消息的handler,
*
* @param topic 主题
* @param groupId 消费者组Id
* @param handler 事件处理类
* @param executorService 上层传递的处理业务的线程池
* @param partitionAssignorMode 分区分配策略
*/
@Override
public <T> void registerUnicastGenerically(@Nonnull String topic, @Nonnull String groupId,
@Nonnull GenericEventHandler<T> handler,
@Nonnull ExecutorService executorService,
PartitionAssignorMode partitionAssignorMode, @NonNull Class<T> clazz) {
partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode);
register(topic, groupId, handler, executorService, partitionAssignorMode, clazz, SerializeEnum.JSON);
}
/**
* 注册处理广播Topic消息的无业务线程池的Handler
*
* @param topic 主题
* @param handler 事件处理类
* @param partitionAssignorMode 分区分配策略
*/
@Override
public <T> void registerBroadcastWithoutThreadPoolGenerically(@Nonnull String topic,
@Nonnull GenericEventHandler<T> handler,
PartitionAssignorMode partitionAssignorMode, @NonNull Class<T> clazz) {
String groupId = idGenerator.createGroupId(topic);
registerUnicastWithoutThreadPoolGenerically(topic, groupId, handler, partitionAssignorMode, clazz);
}
/**
* 注册处理单播Topic消息的无业务线程池的Handler
*
* @param topic 主题
* @param groupId 消费者组
* @param handler 事件处理类
* @param partitionAssignorMode 分区分配策略
*/
@Override
public <T> void registerUnicastWithoutThreadPoolGenerically(@Nonnull String topic, @Nonnull String groupId,
@Nonnull GenericEventHandler<T> handler,
PartitionAssignorMode partitionAssignorMode, @NonNull Class<T> clazz) {
partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode);
register(topic, groupId, handler, null, partitionAssignorMode, clazz, SerializeEnum.JSON);
}@Override
public void registerBroadcast(@Nonnull String topic, @Nonnull GenericEventHandler handler,
@Nonnull ExecutorService executor, @Nonnull SerializeEnum serializeEnum) {
switch (serializeEnum) {
case KRYO:
String groupId = idGenerator.createGroupId(topic);
registerUnicast(topic, groupId, handler, executor, serializeEnum);
break;
case JSON:
default:
registerBroadcastGenerically(topic, handler, executor, EventV2.class);
break;
}
}
/**
* 注册处理广播事件的handler groupId使用UUID随机生成,确保唯一性。
*
* @param topic 主题
* @param handler 事件处理类
* @param executorService 上层传递的处理业务的线程池
* @param partitionAssignorMode 分区分配策略
*/
@Override
public void registerBroadcast(@Nonnull String topic, @Nonnull GenericEventHandler handler,
@Nonnull ExecutorService executorService,
PartitionAssignorMode partitionAssignorMode, @Nonnull SerializeEnum serializeEnum) {
switch (serializeEnum) {
case KRYO:
String groupId = idGenerator.createGroupId(topic);
registerUnicast(topic, groupId, handler, executorService, partitionAssignorMode, serializeEnum);
break;
case JSON:
default:
registerBroadcastGenerically(topic, handler, executorService, partitionAssignorMode, EventV2.class);
break;
}
}
/**
* 注册处理单播事件的handler 一个topic对应一个consumerId
*
* @param topic 主题
* @param groupId 消费者组Id,在同一个组里的消费者实现单播消费
* @param handler 事件处理类
* @param executor 上层传递的用于业务处理的线程池
*/
@Override
public void registerUnicast(@Nonnull String topic, @Nonnull String groupId, @Nonnull GenericEventHandler handler,
@Nonnull ExecutorService executor, @Nonnull SerializeEnum serializeEnum) {
switch (serializeEnum) {
case KRYO:
registerUnicast(topic, groupId, handler, executor, null, serializeEnum);
break;
case JSON:
default:
registerUnicastGenerically(topic, groupId, handler, executor, null, EventV2.class);
break;
}
}
/**
* 注册处理单播Topic消息的handler,
*
* @param topic 主题
* @param groupId 消费者组Id
* @param handler 事件处理类
* @param executorService 上层传递的处理业务的线程池
* @param partitionAssignorMode 分区分配策略
*/
@Override
public void registerUnicast(@Nonnull String topic, @Nonnull String groupId, @Nonnull GenericEventHandler handler,
@Nonnull ExecutorService executorService, PartitionAssignorMode partitionAssignorMode,
@Nonnull SerializeEnum serializeEnum) {
switch (serializeEnum) {
case KRYO:
partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode);
register(topic, groupId, handler, executorService, partitionAssignorMode, EventV2.class,
SerializeEnum.KRYO);
break;
case JSON:
default:
registerUnicastGenerically(topic, groupId, handler, executorService, partitionAssignorMode,
EventV2.class);
break;
}
}
/**
* 注册处理广播Topic消息的无业务线程池的Handler
*
* @param topic 主题
* @param handler 事件处理类
* @param partitionAssignorMode 分区分配策略
*/
@Override
public void registerBroadcastWithoutThreadPool(@Nonnull String topic, @Nonnull GenericEventHandler handler,
PartitionAssignorMode partitionAssignorMode, @Nonnull SerializeEnum serializeEnum) {
switch (serializeEnum) {
case KRYO:
String groupId = idGenerator.createGroupId(topic);
registerUnicastWithoutThreadPool(topic, groupId, handler, partitionAssignorMode, serializeEnum);
break;
case JSON:
default:
registerBroadcastWithoutThreadPoolGenerically(topic, handler, partitionAssignorMode, EventV2.class);
break;
}
}
/**
* 注册处理单播Topic消息的无业务线程池的Handler
*
* @param topic 主题
* @param groupId 消费者组
* @param handler 事件处理类
* @param partitionAssignorMode 分区分配策略
*/
@Override
public void registerUnicastWithoutThreadPool(@Nonnull String topic, @Nonnull String groupId,
@Nonnull GenericEventHandler handler, PartitionAssignorMode partitionAssignorMode,
@Nonnull SerializeEnum serializeEnum) {
switch (serializeEnum) {
case KRYO:
partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode);
register(topic, groupId, handler, null, partitionAssignorMode, EventV2.class, SerializeEnum.JSON);
break;
case JSON:
default:
registerUnicastWithoutThreadPoolGenerically(topic, groupId, handler, partitionAssignorMode,
EventV2.class);
break;
}
}