本文的主要是记录一下学习nacos的过程,今天主要讲的是使用nacos做服务注册和发现的步骤。
nacos是一款作为微服务架构中服务的注册和发现的插件,
类似于Consul、Eureka(这两款在学习的过程中也使用过,我的公司使用的就是Consul),
同时它又提供了分布式配置中心的功能(这一点还没有使用到,只是了解一些,手动哭脸)。
服务发现和服务健康监测
动态配置服务,带管理界面,支持丰富的配置维度。
动态 DNS 服务
下面是nacos官网,各位看官需要的话可以动手戳一下,中文提示比较友好。
https://nacos.io/zh-cn/
nacos是依赖于java环境,首先保证本机安装java环境,
然后从官网下载
Nacos的解压包,选择稳定版下载,下载如图的版本,由于github服务器在外国,可能会比较慢,请耐心等待,下载地址:
https://github.com/alibaba/nacos/releases
下载完成后,解压,在解压后的文件的/bin目录下,点击startup.cmd就可以启动nacos。见下图
启动之后会在控制台打印相关日志信息,nacos的默认启动端口是8848(听起来像8848钛金手机,可能巧合),启动后,浏览器访问
http://localhost:8848/nacos
初始默认登陆用户名和密码都是nacos,登录后效果如下图:
在整个微服务架构中,服务的注册和发现是整个架构的基础。目前主流的服务注册和发现组件有Consul、Eureka、Etcd等。
在整个案例中我们将使用2个服务注册到nacos上,分别名称是
nacos-provider和nacos-consumer。
使用自己的IDEA新建一个springboot项目,其中主要的pom.xml文件依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
在工程文件application.yml配置如下:
server:
port: 8762 #项目启动端口
spring:
application:
name: nacos-provider #项目名称,后面注册的时候就是使用这个名称
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #nacos启动端口,项目就是需要往这个注册
在项目的启动类上面加上@
EnableDiscoveryClient注解,这样才能成为一个服务注册到nacos上面去
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
}
此时
nacos-provider才算是构建完成,可以启动项目,在nacos可视化界面查看服务启动情况(http://localhost:8848/nacos),如图:
此时
nacos-provider算是正常注册到nacos上面。
nacos-consumer的创建过程与nacos-provider一致,只是在相关的yml文件配置上面有一些不一样的地方,启动端口是8763,
项目名称是nacos-consumer,具体配置如下:
server:
port: 8763
spring:
application:
name: nacos-consuer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
此时可以将两个项目同时启动,并且能在nacos控制台能看到相应的服务注册到nacos上面,如图:
至此,使用nacos作为服务的注册和发现组件已经完成了,各位是不是觉得非常简单
第一步,只要下载好nacos插件,在本地启动好,目前我还不清楚这个插件启动端口8848端口是否能更改。
第二步,构建相应的服务,引入相关依赖,在yml文件里面配置好服务端口,项目名称,注册到nacos的端口(8848)。
接下来的问题是既然构建
nacos-provider作为服务的提供者,那我们应该怎么消费这个服务呢?
nacos作为服务的发现和注册组件的时候,在进行服务消费的时候和使用Consul作为服务注册和发现的组件是一样的,没有什么区别。这是因为spring-cloud-starter-alibaba-nacos-discovery依赖实现了Spring Cloud服务注册和发现的相关接口,可以和其他服务注册发现组件无缝切换
在nacos-provider项目中,新建一个controller层,提供相应的API服务,代码如下:
@RestController
public class ProviderController {
@GetMapping("/hello")
public String hi(@RequestParam(value = "name")String name){
return "hello "+name;
}
}
在这里使用的是
RestTemplate作为服务的消费方式,其他的消费方式还有使用
Feign来消费服务(这个没有使用过,如果需要下次会另写一篇文章来学习一下),
RestTemplate可以使用Ribbon作为负载均衡组件
,首先在nacos-consumer工程中引入ribbon的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
在
nacos-consum
er启动类(NacosConsuerApplication)
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
加上@LoadBalanced注解即可在RestTemplate上开启LoadBalanced负载均衡的功能。
在nacos-consumer项目中,新建一个controller层,作为服务的消费层,代码如下:
@RestController
public class ConsumerController {
@Autowired
RestTemplate restTemplate;
@GetMapping("/hiResttemplate")
public String hiResttemplate(@RequestParam(value = "name")String name){
return restTemplate.getForObject("http://nacos-provider/hello?name="+name,String.class);
}
}
http://localhost:8763/hiResttemplate?name=caozhongying
就可以在浏览器显示出请求的响应结果,这就说明
可以在
nacos-
consum
er
端调用到
nacos-provide服务了,至此证明这时nacos-consumer调用nacos-provider服务成功。
到这里,这次分享就结束了,特别感谢方志朋老师的专栏对我的学习的帮助,您可以点击文章末尾的阅读原文链接进行学习。谢谢您的阅读,希望您的手指戳一下在看哟,期待下一次的相聚。