文章目录
前言
版本选择:
spring-boot:2.3.2.RELEASE
spring-cloud:Hoxton.SR8
spring-cloud-alibaba:2.2.3.RELEASE
博客前瞻:
springcloud-alibaba-nacos(1)nacos组件功能介绍与下载安装
springcloud-alibaba-nacos(2)nacos启动,解决启动报错问题
springcloud-alibaba-nacos(3)nacos数据持久化到数据库
在nacos的左侧菜单服务管理
一栏便是等同于以往微服务注册中心的 注册表了,当我们能够打开这个web页面的时候,就证明了nacos
服务端已经启动了
那么,我们的服务如何注册到nacos
呢?nacos
如何在项目中使用呢?我们结合项目来一起研究学习…
官网展示的使用Nacos
作为服务注册与发现的架构图如下
开发微服务项目注册到Nacos
(1)创建项目
(2)添加依赖
spring-cloud-alibaba
组件版本是由alibaba
自行维护的,我们再使用的使用需要注意其余springboot
、springcloud
间的依赖关系
下边是官网推荐的三者版本依赖关系…
Spring Cloud Version | Spring Cloud Alibaba Version | Spring Boot Version |
---|---|---|
Spring Cloud Hoxton.SR8 | 2.2.3.RELEASE | 2.3.2.RELEASE |
Spring Cloud Greenwich.SR6 | 2.1.3.RELEASE | 2.1.13.RELEASE |
Spring Cloud Hoxton.SR3 | 2.2.1.RELEASE | 2.2.5.RELEASE |
Spring Cloud Hoxton.RELEASE | 2.2.0.RELEASE | 2.2.X.RELEASE |
Spring Cloud Greenwich | 2.1.2.RELEASE | 2.1.X.RELEASE |
Spring Cloud Finchley | 2.0.3.RELEASE | 2.0.X.RELEASE |
Spring Cloud Edgware | 1.5.1.RELEASE(停止维护,建议升级) | 1.5.X.RELEASE |
更改springBoot版本至对应
根据官网指引,我们首先更改springboot
版本至 2.3.2.RELEASE
使用dependencyManagement指定spring-cloud-alibaba版本
<!--指定spring-cloud-alibaba版本-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
当然您可以将alibaba
版本做一个变量在properties
处存放,例如这样
<properties>
<springcloud.alibaba.version>2.2.3.RELEASE</springcloud.alibaba.version>
</properties>
<!--指定spring-cloud-alibaba版本-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${springcloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
引入Nacos注册中心客户端依赖
<!--引入Nacos注册中心客户端依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
(3)配置文件配置Nacos注册中心信息
与以往的注册中心客户端一样,我们仍需要在我们的项目配置文件中,配置注册中心服务端的信息,以便服务能够进行注册…
配置文件配置Nacos地址信息
#指定当前服务端口号
server:
port: 40020
spring:
application:
#指定当前服务名字
name: app-user
cloud:
nacos:
#指定nacos服务端的位置(当前仅是作为一个变量罢了) 默认为localhost:8848
server-addr: http://nacos所在服务器IP:8848
discovery:
# nacos服务端位置(实际使用) 默认就是此配置,可省略此步配置
server-addr: ${spring.cloud.nacos.server-addr}
(4)启动服务
启动后,IDEA控制台打印了注册成功信息日志
我们再web控制台刷新试一试,看看是否有服务信息
刷新后,看到了我们的服务app-user
的信息,并且实例数,健康数全部进行了展示
我们再对app-user
更改端口后再启动一个实例,继续观测nacos
控制台信息
发现实例数以及健康状态数变为了2,因为我们对app-user
启动了两个实例嘛
点击右侧详情,便可查看app-user
服务集群信息了!
我们甚至还可以再多起启动几个app-user
实例
可以说明,app-user
服务已经注册到了我们的nacos上了!!
(5)注意点:
-
注意
spring-cloud-alibaba
与spring-cloud
、spring-boot
三者版本对应关系 -
注意配置文件中的
spring.cloud.nacos.server-addr
仅是作为变量引入注册中心位置,真正使用到注册中心服务端地址的配置是spring.cloud.nacos.discovery.server-addr
-
注意
nacos
无需再启动类打上注解@EnableDiscoveryClient
nacos
与consul
注册中心服务端都无需手动打上注解@EnableDiscoveryClient
,而作为eureka
客户端则必须打上此注解
基于Nacos注册中心的服务间通信
(1)创建登录注册微服务工程,并注册到Nacos
注册中心
(2)引入服务调用依赖Open-Feign
我们首先需要指定spring-cloud版本管理
<properties>
<java.version>1.8</java.version>
<springcloud.alibaba.version>2.2.3.RELEASE</springcloud.alibaba.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<!--指定spring-cloud-alibaba版本-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${springcloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--指定spring-cloud版本-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
引入OpenFeign依赖
<!--open-feign依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
(3)编写测试DEMO
登录服务编写简单的demo
@RestController
public class LoginController {
private final UserFeignClient userFeignClient;
@Autowired
public LoginController(UserFeignClient userFeignClient) {
this.userFeignClient = userFeignClient;
}
@PostMapping("/login")
public String login(@RequestBody User user) {
String result = userFeignClient.findOneByUserNameAndPassWord(user.getUserName(), user.getPassWord());
if ("success".equals(result)) {
return "登陆成功啦!!!";
}
return "登陆失败";
}
}
@FeignClient(value = "app-user")
public interface UserFeignClient {
@GetMapping("/user/find/{userName}/{passWord}")
String findOneByUserNameAndPassWord(@PathVariable("userName") String userName, @PathVariable("passWord") String passWord);
}
用户服务编写简单查询
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/find/{userName}/{passWord}")
public String findUser(@PathVariable("userName") String userName, @PathVariable("passWord") String passWord,
HttpServletRequest request) {
System.out.println(request.getRemoteAddr() + "调用了.......");
if (Objects.equals("lei", userName) && Objects.equals("123456", passWord)) {
return "success";
}
return "error";
}
}
(4)测试
app-user
启动一个实例测试
首先,我们app-user
只启动一个实例
多次请求,发现确实app-login
服务通过nacos
注册中心找到并且调用到了app-user
服务
app-user
启动多个实例测试
启动4个实例,并且都注册到nacos
注册中心
登录测试
调用8次,每一个app-user
服务都收到了两次请求…
我们点击nacos控制台查看app-user
详情
发现app-user
集群中,默认为我们的每一个app-user
都设置了一个权重,且权重值都相等,值为1…
难怪我们的8次请求可以如此均匀的落到每一个服务器上…
我们甚至可以根据业务需要,对某一个具体的微服务实例进行上下线以及权重设置等等…
通过以上测试,发现我们的Nacos作为微服务的注册中心完全是OK的,其强大的web功能让人眼前一亮!!!奥里给!!!
附上项目源码:cloud-alibaba