我是靠谱客的博主 殷勤镜子,最近开发中收集的这篇文章主要介绍soul源码学习(五)-springcloud示例配置启动访问注意事项springcloud客户端注册源码分析,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
文章目录
- 配置
- 启动
- 访问
- 注意事项
- springcloud客户端注册源码分析
配置
- soul-admin需要开启springcloud插件
- soul-bootstrap引入springcloud相关依赖
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-plugin-springcloud</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
- 修改soul-boosrap配置文件(关键配置)
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
- 修改soul-examples-springcloud配置文件(关键配置)
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
soul:
springcloud:
admin-url: http://localhost:9095
context-path: /springcloud
-
在相应需要代理的类或方法加入soul注解
-
soul-examples-eureka配置文件保持不变
启动
- 启动soul-admin
- 启动soul-bootstrap
- 启动soul-examples-eureka
- 启动soul-examples-springcloud
访问
注意事项
- springcloud需要依赖注册中心eureka,如同dubbo与sofa依赖zookeeper一样,因此需要启动soul-examples-eureka
- 与sofa和dubbo不同是,sofa和dubbo的注册中心地址在soul-admin中插件中进行维护配置,而springcloud并没有,而是直接写在soul-bootstrap的相关配置配置文件中,如图
springcloud以及sofa和dubbo都有自己的注册中心,正常情况下,当浏览器访问网关时,由网关去各自注册中心获取相关服务信息,网关代理访问相关服务并返回结果,流程基本一样,因此eureka的地址也可配置在插件中,目前尚不清楚为何没和dubbo一样都在soul-admin中的插件管理中进行配置
springcloud客户端注册源码分析
在soul-spring-boot-starter-client-springcloud包中,自动配置类SoulSpringCloudClientConfiguration有三个方法
@Bean
public SpringCloudClientBeanPostProcessor springCloudClientBeanPostProcessor(final SoulSpringCloudConfig soulSpringCloudConfig, final Environment env) {
return new SpringCloudClientBeanPostProcessor(soulSpringCloudConfig, env);
}
@Bean
public ContextRegisterListener contextRegisterListener(final SoulSpringCloudConfig soulSpringCloudConfig, final Environment env) {
return new ContextRegisterListener(soulSpringCloudConfig, env);
}
@Bean
@ConfigurationProperties(prefix = "soul.springcloud")
public SoulSpringCloudConfig soulSpringCloudConfig() {
return new SoulSpringCloudConfig();
}
其中soulSpringCloudConfig 和springCloudClientBeanPostProcessor方法与上一篇中sofa客户端注册过程雷同,不在分析,目前着重分析下contextRegisterListener该方法的作用,跟踪进入到相关类:
@Slf4j
public class ContextRegisterListener implements ApplicationListener {
private final AtomicBoolean registered = new AtomicBoolean(false);
private final String url;
private final SoulSpringCloudConfig config;
private final Environment env;
public ContextRegisterListener(final SoulSpringCloudConfig config, final Environment env) {
ValidateUtils.validate(config, env);
this.config = config;
this.env = env;
this.url = config.getAdminUrl() + "/soul-client/springcloud-register";
}
@Override
public void onApplicationEvent(final ContextRefreshedEvent contextRefreshedEvent) {
if (!registered.compareAndSet(false, true)) {//用来防止重复注册
return;
}
if (config.isFull()) {//判断配置属性full是否为true
RegisterUtils.doRegister(buildJsonParams(), url, RpcTypeEnum.SPRING_CLOUD);
}
}
private String buildJsonParams() {
String contextPath = config.getContextPath();
String appName = env.getProperty("spring.application.name");
String path = contextPath + "/**"; //注册contextPath下的所有路径
SpringCloudRegisterDTO registerDTO = SpringCloudRegisterDTO.builder()
.context(contextPath)
.appName(appName)
.path(path)
.rpcType(RpcTypeEnum.SPRING_CLOUD.getName())
.enabled(true)
.ruleName(path)
.build();
return OkHttpTools.getInstance().getGson().toJson(registerDTO);
}
}
可以看出contextRegisterListener的主要作用是在spring启动时,接收上下文刷新事件后,获取SoulSpringCloudConfig中full属性,如果为true的话,会自动注册contextPath下所有的url,也就是说开启了该属性,相关代理类或方法可以不用挨个添加soul的代理注解,一键全局生效
最后
以上就是殷勤镜子为你收集整理的soul源码学习(五)-springcloud示例配置启动访问注意事项springcloud客户端注册源码分析的全部内容,希望文章能够帮你解决soul源码学习(五)-springcloud示例配置启动访问注意事项springcloud客户端注册源码分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复