一. 为什么使用spring cloud alibaba
很多人可能会问,有了spring cloud这个微服务的框架,为什么又要使用spring cloud alibaba这个框架了?最重要的原因在于spring cloud中的几乎所有的组件都使用Netflix公司的产品,然后在其基础上做了一层封装。然而Netflix的服务发现组件Eureka已经停止更新,在使用的时候发现过其一个细小的Bug;而其他的众多组件也会陆续停止维护。所以急需其他的一些替代产品,也就是spring cloud alibaba,目前正处于蓬勃发展的态式。
二. 安装注册中心Nacos
nacos是阿里巴巴研发的一个集注册中心与配置中心于一体的管理平台,使用其非常的简单。
下载nacos
https://github.com/alibaba/nacos/releases
我下载的是1.3.2版本,如下图所示:
![7e7fd41cfc71d2595598f9d3e744ed74.png](https://i-blog.csdnimg.cn/blog_migrate/1279433b53fd1a267d5bd78e9873bd29.jpeg)
1、Windows系统直接解压,找到bin目录,双击startup.cmd启动。如果出现一闪而退,请参照以下方法解决:
(1)、编辑startup.cmd,把里面的MODE修改一下,保存后重新启动(我就是使用该方法解决了问题),参考下图:
![a78c222a3c012559788ab481ba51335a.png](https://i-blog.csdnimg.cn/blog_migrate/6df3483b2103167dd1939475db078b6f.jpeg)
(2)、检查jdk是否为jdk8 64bit,并配置环境变量,且环境变量必须为JAVA_HOME
(3)、检查maven,并配置环境变量
2、Linux系统也要安装好jdk环境和maven环境,执行mvn -version出现下面内容则成功:
![6e426f0f59ceeee4816cd1b2c299fbdb.png](https://i-blog.csdnimg.cn/blog_migrate/2429fab7fb6d79a2576fcea01371c369.jpeg)
然后到nacos/bin目录下执行该命令启动
sh startup.sh -m standalone
nacos默认端口是8848,http://ip:8848/nacos访问,输入账号密码:nacos nacos即可。
![7d869ed65aaa5dd1f0c91b6d1fd7537d.png](https://i-blog.csdnimg.cn/blog_migrate/6e5019d7fcba20535ad20e3d5233ae76.jpeg)
三、将服务部署到nacos
整合springcloud和springcloud alibaba,注意版本号要对应。
第一步,加依赖
org.springframework.cloud spring-cloud-dependencies Greenwich.SR1pomimportorg.springframework.cloud spring-cloud-alibaba-dependencies 0.9.0.RELEASEpomimportorg.springframework.cloud spring-cloud-starter-alibaba-nacos-discovery
第二步,加注解(这个新版省略了注解)
第三步,写配置,在yml文件中加入nacos配置
spring: cloud: nacos: discovery: #指定nacos server的地址 server-addr: localhost:8848 #指定服务名称 application: name: user-center
此时刷新nacos访问页面,将会看到服务已经注册上了。
![8d1552db998c1f85f7b6a85e2c4f3777.png](https://i-blog.csdnimg.cn/blog_migrate/571e26751e5379f899fd05ba65ef7f0a.jpeg)
四、测试
需求:为内容服务引入用户服务中的用户信息。
方案:采用RestTemplate方式来调取用户中心接口,通过DiscoveryClient获取nacos上的用户中心实例。
1、用户服务提供一个查询用户信息接口
@RestController@RequestMapping("/users")public class UserController { @Resource private UserService userService; @GetMapping("/{id}") public User findById(@PathVariable Integer id){ return this.userService.findById(id); }}
2、内容中心接口
@RestController@RequestMapping("/shares")public class ShareController { @Resource private ShareService shareService; @GetMapping("/{id}") public ShareDTO findById(@PathVariable Integer id) { return this.shareService.findById(id); }}@Servicepublic class ShareService { @Resource private ShareMapper shareMapper; @Resource private RestTemplate restTemplate; @Resource private DiscoveryClient discoveryClient; public ShareDTO findById(Integer id) { Share share = this.shareMapper.selectByPrimaryKey(id); Integer userId = share.getUserId(); //用户中心的所有实例信息 List instances = discoveryClient.getInstances("user-center"); String targetUrl = instances .stream() .map(instance -> instance.getUri().toString() + "/users/{id}") .findFirst() .orElseThrow(() -> new IllegalArgumentException("当前没有实例对象")); //根据userId查询用户信息 UserDTO userDTO = this.restTemplate.getForObject(targetUrl, UserDTO.class, userId); ShareDTO shareDTO = new ShareDTO(); BeanUtils.copyProperties(share, shareDTO); shareDTO.setWxNickname(userDTO.getWxNickname()); return shareDTO; }}
请求结果如下图展示:author字段是来自用户服务的
![8ccd3db4162fedc805cd8a39a75bfb16.png](https://i-blog.csdnimg.cn/blog_migrate/cb164e56276602bd5297986ab58137e6.jpeg)
OK,nacos入门就到这里,下一篇我们来学习ribbon负载均衡哦。
有问题欢迎小伙伴留言。