springcloud-alibaba-nacos(4)nacos作为注册中心

前言

版本选择:

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服务端已经启动了

image-20201213202918592

那么,我们的服务如何注册到nacos呢?nacos如何在项目中使用呢?我们结合项目来一起研究学习…

官网展示的使用Nacos作为服务注册与发现的架构图如下

image-20201213212718381

开发微服务项目注册到Nacos

(1)创建项目

image-20201213205830244

(2)添加依赖

spring-cloud-alibaba 组件版本是由alibaba自行维护的,我们再使用的使用需要注意其余springbootspringcloud间的依赖关系

下边是官网推荐的三者版本依赖关系…

Spring Cloud VersionSpring Cloud Alibaba VersionSpring Boot Version
Spring Cloud Hoxton.SR82.2.3.RELEASE2.3.2.RELEASE
Spring Cloud Greenwich.SR62.1.3.RELEASE2.1.13.RELEASE
Spring Cloud Hoxton.SR32.2.1.RELEASE2.2.5.RELEASE
Spring Cloud Hoxton.RELEASE2.2.0.RELEASE2.2.X.RELEASE
Spring Cloud Greenwich2.1.2.RELEASE2.1.X.RELEASE
Spring Cloud Finchley2.0.3.RELEASE2.0.X.RELEASE
Spring Cloud Edgware1.5.1.RELEASE(停止维护,建议升级)1.5.X.RELEASE

更改springBoot版本至对应

根据官网指引,我们首先更改springboot版本至 2.3.2.RELEASE

image-20201213211325496

使用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>

image-20201213211812213

当然您可以将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>

image-20201213212617155

(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控制台打印了注册成功信息日志

image-20201213213839413

我们再web控制台刷新试一试,看看是否有服务信息

image-20201213214002684

刷新后,看到了我们的服务app-user的信息,并且实例数,健康数全部进行了展示

我们再对app-user更改端口后再启动一个实例,继续观测nacos控制台信息

image-20201213214415453

image-20201213214349970

发现实例数以及健康状态数变为了2,因为我们对app-user启动了两个实例嘛

image-20201213214506796

点击右侧详情,便可查看app-user服务集群信息了!

image-20201213214625905

我们甚至还可以再多起启动几个app-user实例

image-20201213215041399

image-20201213215028450

可以说明,app-user服务已经注册到了我们的nacos上了!!

(5)注意点:

  • 注意spring-cloud-alibabaspring-cloudspring-boot三者版本对应关系

  • 注意配置文件中的spring.cloud.nacos.server-addr仅是作为变量引入注册中心位置,真正使用到注册中心服务端地址的配置是spring.cloud.nacos.discovery.server-addr

  • 注意nacos无需再启动类打上注解@EnableDiscoveryClient

    image-20201213215552972

    nacosconsul 注册中心服务端都无需手动打上注解@EnableDiscoveryClient,而作为eureka客户端则必须打上此注解

基于Nacos注册中心的服务间通信

(1)创建登录注册微服务工程,并注册到Nacos注册中心

image-20201213221630836

(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只启动一个实例

image-20201213223530162

image-20201213223824969

多次请求,发现确实app-login服务通过nacos注册中心找到并且调用到了app-user服务


app-user启动多个实例测试

启动4个实例,并且都注册到nacos注册中心

image-20201213224237014

image-20201213224301825

登录测试

image-20201213224702766

调用8次,每一个app-user服务都收到了两次请求…

我们点击nacos控制台查看app-user详情

image-20201213224832323

发现app-user集群中,默认为我们的每一个app-user都设置了一个权重,且权重值都相等,值为1…

难怪我们的8次请求可以如此均匀的落到每一个服务器上…

image-20201213224343552

我们甚至可以根据业务需要,对某一个具体的微服务实例进行上下线以及权重设置等等…


通过以上测试,发现我们的Nacos作为微服务的注册中心完全是OK的,其强大的web功能让人眼前一亮!!!奥里给!!!

附上项目源码:cloud-alibaba

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值