1.起由
2.概念
InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。
启动服务后 spring 会自动去 在初始化bean的时候都会执行该方法。
所以启动 oms服务 至此问题解决
4.自己知道怎么配置动态路由
启动 oms服务
先 log.warn("接收到Redis重新加载路由事件");
再 初始化路由 保存到redis中 通知网关重置路由
geteway 接收到JVM 重新加载路由事件
至此流程完成 整个路由配置
动态路由则在
https://blog.csdn.net/lmchhh/article/details/120792267
项目 中的注解
@Inherited
接口用上个@Inherited修饰的注解,其实现类不会继承这个注解
父类的方法用了@Inherited修饰的注解,子类也不会继承这个注解
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
@ConditionalOnWebApplication 条件是:如果当前应用是web应用时,则该配置类生效。
@RequiredArgsConstructor
@RequiredArgsConstructor注解可以代替@Autowired注解
@Async
@Async是Spring Boot里面的[异步调用]
@Order
方法被优先执行
@EventListener({ WebServerInitializedEvent.class })
监听事件
@TransactionalEventListener({ DynamicRouteInitEvent.class })
@TransactionalEventListener注解原理也是一致的,只是该监听者可选择在事务完成后,才被执行,事务执行失败就不会执行。
https://zhuanlan.zhihu.com/p/555723916?utm_id=0
2.项目中自己没用过 的方法 和类
1)RedisMessageListenerContainer
2)redisTemplate.convertAndSend(CacheConstant.ROUTE_JVM_RELOAD_TOPIC, "路由信息,网关缓存更新");
3)/**
* redis 监听配置,监听 oms_redis_route_reload_topic,重新加载Redis
* @throws Exception
*/
@Override
public void afterPropertiesSet() throws Exception {
4) redisTemplate.setKeySerializer(new StringRedisSerializer());
5)
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(redisConnectionFactory);
container.addMessageListener((message, bytes) -> {
log.warn("接收到JVM 重新加载路由事件");
RouteCacheHolder.removeRouteList();
// 发送刷新路由事件
SpringContextHolder.publishEvent(new RefreshRoutesEvent(this));
}, new ChannelTopic(CacheConstant.ROUTE_JVM_RELOAD_TOPIC));
类似客户端 通知中心的功能 注册 接收