上一篇获取当前登录用户我们讲解了怎么获取当前登录的用户
这一篇我们来讲解下注册中心,注册中心其实是微服务的核心组件了
本文源码:
常用的注册中心:
- eureka 只维护1.X版本了,2.x版本已经放弃了。属于CA原则的注册中心
- ZooKeeper 高一致性的注册中心,也是dubbo支持的比较好的注册中心
- consul 可以理解是eureka的升华,适用于大的系统中
- nacos 阿里新开源的注册中心和配置中心集成的服务。
上面的注册中心其实各有各的优点,至于如何选择就看个人的意愿了。
这里讲解的的是以nacos为注册中心的配置
集成方式请参考:
集成注册中心之后,官方给的服务之间调用的方式如下:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
@RestController
public class TestController {
private final RestTemplate restTemplate;
@Autowired
public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
}
}
}
但是对于习惯了openfeign的方式的我,实在是有点操蛋,而且每次都得写连接地址其实就和以前调用外部API的方式一样了,无非现在变成了内部调用。那么下面来说下openfeign的使用:
首先POM文件增加引入:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
启动类增加注解:
@EnableFeignClients
新建调用服务:
@FeignClient(name = "user")
public interface UserService {
/**
* 通过用户名,或者email获取用户名
* @param email
* @return
*/
@GetMapping("/user/email/{email}")
ComResponse<User> getUserByEmail(@PathVariable("email") String email);
/**
* 通过用户名,或者email获取用户名
* @param telephone
* @return
*/
@GetMapping("/user/tel/{telephone}")
ComResponse<User> getUserByTel(@PathVariable("telephone") String telephone);
/**
* 根据用户查询角色
* @param userId
* @return
*/
@GetMapping("/role/list/{userId}")
ComResponse<List<Role>> listByUser(@PathVariable("userId") Long userId);
/**
* 通过用户查询权限
* @param roleId
* @return
*/
@GetMapping("/permission/list/{roleId}")
ComResponse<List<Permission>> listByRole(@PathVariable("roleId") Long roleId);
}
这样是不是又一种很熟悉的感觉呢。这样就可以直接引入service进行调用。