Spring Cloud微服务项目搭建系列文章(十):使用nacos作为注册中心openfeign进行服务之间调用

上一篇获取当前登录用户我们讲解了怎么获取当前登录的用户

这一篇我们来讲解下注册中心,注册中心其实是微服务的核心组件了

本文源码:

源码地址

常用的注册中心:

  • 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进行调用。

发布了183 篇原创文章 · 获赞 37 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/zhuwei_clark/article/details/104790681