Nacos实现服务注册与消费
前言
nacos的介绍不用多说了,大家搜索nacos相关文档时,多多少少都有了一定的了解。写这篇博文的原因是:今天刚接触到nacos,在尝试开始配置时,参考网上前辈的各种教程都没能成功,索性放弃,转而参考官网的文档成功了。所以,这篇文章作用就是给我一样刚接触nacos的小白提供一定的参考作用,少走点弯路。
一、安装Nacos
安装的文档:https://nacos.io/zh-cn/docs/quick-start.html
window环境下安装好,直接点击startup.cmd就可以启动了
启动成功界面如上图,注意这个ip地址,之后会用到。
启动好了之后,可以访问:ip地址:8848/nacos/#/login
比如我的就是 http://192.168.91.1:8848/nacos/#/login。
账号和密码都是nacos
登录界面:
主界面:
二、创建工程
我用的是SpringBoot创建的工程,可根据自己的喜好,随便创建。创建好的工程目录结构如下:
创建了4个项目,3个service项目模拟服务提供者,1个client模拟消费者。
tip:
可能有小伙伴不会创建同一个项目下多个工程,百度一下就行了,很简单的。
可以参考下这篇文章:https://www.cnblogs.com/oskyhg/p/6649266.html
三、开始编写service工程
1、配置pom.xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
整个nacos的核心就是这两个:
2、配置application.properties
#ip地址信息
spring.cloud.nacos.discovery.server-addr=192.168.91.1:8848
#服务名称(随便起)
spring.application.name=nacos-provider
#端口号
server.port=8002
==注意:==如果IP地址不是本机的话(比如云服务器),记得在安全组里开启8848端口。
3、在主启动类上添加@EnableDiscoveryClient注解
四、启动项目测试
启动刚刚写好的服务类,看见这条信息说明配置成功了~
在Nacos中查看
这里会显示服务,我这是4个服务都启动了,所以数目有点不一样。
五、创建消费者并测试
1、在服务端创建Controller写个测试代码
@ResponseBody
@RequestMapping("testService")
public String testService(){
return "这是来自服务端提供的服务~!";
}
2、多复制几个服务端,等会做下负载均衡的测试
我这复制了两个。
3、创建消费端
a、 消费端的pom.xml与服务端一致。
b、 application.properties如下:
c、 主函数加同样的注解
d、 编写controller做测试
@Autowired
LoadBalancerClient loadBalancerClient;
@ResponseBody
@RequestMapping("/test")
public String test() {
// 通过spring cloud common中的负载均衡接口选取服务提供节点实现接口调用
ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");
System.out.println(serviceInstance.getUri());
String url = serviceInstance.getUri() + "/testService";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(url, String.class);
return "Invoke : " + url + ", return : " + result;
}
}
六、测试
首先把3个服务端都启动,注意一下,这四个项目的端口都不能一样,必须各不相同。 比如我的8001、8002 、8003作为服务端,8004作为消费端。
开始测试!
实现了负载均衡~