最近在做有关微服务的项目。学到了很多东西,但是中间也遇到了很多问题。
其中一个问题就是,一个微服务项目有时候需要通过url访问服务,有时候需要通过serviceId 访问注册在注册服务器的服务。
这个在开发过程中就感觉很麻烦。客户端我们是通过restTemplate访问的。
当访问url的服务时,需要直接使用restTemplate
而当访问serviceId的服务时,需要使用@AutoBalanced restTemplate。当时想把所有的serviceId写到配置文件里面,来区别使用哪个restTemplate。找了找,并没有找到提供这种服务的jar包。
后来就自己写了一个这样的工具包。
<dependency>
<groupId>com.github.davidmeng</groupId>
<artifactId>autoRouteRestTemplate</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
已经把代码上传到maven库里面。
@LoadBalanced
@Bean(name = "dockerRestTemplate")
@ConditionalOnMissingBean(name = "dockerRestTemplate")
RestTemplate dockerRestTemplate() {
return new RestTemplate();
}
@Bean(name = "domainRestTemplate")
@ConditionalOnMissingBean(name = "domainRestTemplate")
RestTemplate domainRestTemplate() {
return new RestTemplate();
}
这个是两个RestTemplate的注释。如果在项目中,要对restTemplate进行配置,只要重新写这两个类就可以了。
dockerRestTemplate是需要通过serviceId访问的restTemplate
domainRestTemplate就是通过url的普通的restTemplate。
哪些访问dockerRestTemplate,哪个访问domainRestTemplate。是通过RouteDockerRule接口决定的。
里面只有一种方法
public boolean isDockerHost(URI host);
默认的方法是如果url里面含有"."那么就认为应该通过url访问。其他就是serviceId。
如果不符合项目需要,那么就需要重新写这个方法。