[apolloconfig/apollo]请教大佬publisher.publishEvent的作用是?

2024-07-05 924 views
3

源码中有很多这种调用,如下,其作用是?

ConfigPublishEvent event = ConfigPublishEvent.instance(); event.withAppId(appId) .withCluster(clusterName) .withNamespace(namespaceName) .withReleaseId(createdRelease.getId()) .setGrayPublishEvent(true) .setEnv(Env.valueOf(env));

publisher.publishEvent(event);

回答

2

可以看下消费事件的地方,比如 ConfigPublishListener

5

ConfigPublishEvent是portal模块自定义的事件,描述了配置的发布、回滚这些事件。基于Spring的事件及监听机制,可以被ConfigPublishListener捕获到,并做一些相应的处理,比如发送邮件、调用其他接口。

9

我看源代码里的发布和监听都是同步的,为什么不直接把相应的处理逻辑写成service调用?

3

能起到一定的解耦作用

6

发布监听这种模式在你需要增加新功能的时候只需要加新代码,不需要改旧代码,大大降低了merge的时候冲突的概率,方便了多人协作开发

2

publish event spring中其实是同步处理的,但是实际在使用这种事件通知时是想用异步方式的,但是大多数人没有关注这个细节,建议使用异步方式,在event listener方法上增加@Aysnc注解,提交到别的线程池去处理