当前位置:首页 » 《资源分享》 » 正文

Windows下安装nacos2与springboot服务注册验证_大龄码农有梦想的博客

27 人参与  2021年10月08日 15:23  分类 : 《资源分享》  评论

点击全文阅读


本文章是nacos2服务注册发现入门级文章,重点介绍了如何安装部署nacos2,如何选择spring boot版本、spring cloud版本,如何开发spring boot服务,如何注册到naocs2中,如何使用RestTemplate和Feign调用服务。

一、验证环境

  1. Windows10  64位
  2. JDK1.8
  3. Nacos2.0.3
  4. Spring Boot 2.3.2.RELEASE
  5. Spring Cloud Alibaba 2.2.6.RELEAS

二、参考文档

Nacos官方文档:Nacos支持三种部署模式

Nacos开源地址:Releases · alibaba/nacos · GitHub

三、安装部署nacos

1、下载nacos

从Nacos官方网站下载nacos-2.0.3版本:

Releases · alibaba/nacos · GitHubhttps://github.com/alibaba/nacos/releases

下载完成后,解压即可

2、配置数据库

nacos默认是使用嵌入式数据库实现数据的存储,如果我们要使用外部 mysql 存储 nacos数据,先在mysql里创建nacos数据库

创建完成后,导入mysql脚本,到安装目录conf/nacos-mysql.sql

找到脚本文件执行,完成mysql 数据库初始化。

注意,mysql5.6版本会报错:Specified key was too long; max key length is 767 bytes,原因是mysql5.6最长的索引是767,要用Mysql5.7以上版本解决该问题。

修改 conf/application.properties文件,添加 mysql 数据源的配置,然后重启,便可生效。

3、启动nacos

双击 bin 目录下的 startup.cmd 启动服务器,在启动之前,先修改启动模式为standalone,即单机独立启动,非集群模式。

4、访问nacos

通过浏览器访问 http://127.0.0.1:8848/nacos 打开 nacos 控制台登录页面,默认用户名密码皆为:nacos,登录成功后便可访问主页面。

 

四、服务注册发现验证

1、springcloud+springboot版本选择

版本问题:开发代码需要注意springcloud、springboot、nacos 这些组件间版本依赖问题,具体看官方说明,版本不匹配可能会引起莫名其妙的问题,尽量使用官方推荐的版本。详细说明见官方wiki:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8Ehttps://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

本示例工程使用的版本为:

Spring Boot 2.3.2.RELEASE版本、 Spring Cloud Alibaba 2.2.6.RELEAS版本

2、服务注册发现架构描述

在微服务架构中,整个系统会按职责划分为多个服务,通过服务之间且做来实现业务目标。这样在我们的代码中免不了要进行服务间的远程调用,服务的消费方要调用服务的生产方,为了完成这一次请求,消费方需要知道服务生产方的网络位置(IP地址和端口号)

本示例逻辑架构图:

示例工程结构如下:

开源代码地址:基于Nacos2+Spring Boot2的服务注册发现示例: 基于Nacos2+Spring Boot2的服务注册发现示例,可以直接运行。

 

3、springboot代码实现与服务注册发现验证

步骤1:新建父工程

Pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>nacos-example</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <name>nacos-example</name>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
    </parent>

    <modules>
        <module>nacos-provider</module>
        <module>nacos-consumer</module>
    </modules>

    <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-config</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>

    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

 以上便是父工程的代码,其中关键点在于:引入 spring-cloud-starter-alibaba-nacos-discovery jar包、spring-cloud-starter-openfeign包、spring-boot-starter-web包; 

步骤2:新建服务提供者service-provider

Pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>nacos-provider</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>nacos-provider</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <artifactId>nacos-example</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <dependencies>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 application.yml如下:

spring:
  application:
    name: service-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 8070

注意:server-addr: 127.0.0.1:8848为Nacos服务地址,service-provider为该服务的名称,服务消费者要使用该名字。

启动类如下:

package com.nacos.example.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;


@EnableDiscoveryClient
@SpringBootApplication
public class NacosProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosProviderApplication.class, args);
    }

}

服务类如下:

package com.nacos.example.provider.controller;

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/provider")
public class ProviderController {

    @RequestMapping(value = "/echo", method = RequestMethod.GET)
    public String echo() {
        return "Hello Nacos Discovery 2021";
    }

}

以上便是提供者的代码,其中关键点在于: 1. 在启动类标注 @EnableDiscoveryClient 注解 ;2. 在 application.yml 中配置nacos服务中心的地址; 3. 在 controller 中暴露服务。

步骤3:新建服务消费者service-consumer

Pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>nacos-consumer</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>nacos-consumer</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <artifactId>nacos-example</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <dependencies>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.yml如下:

spring:
  application:
    name: service-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 8080

启动类如下:

package com.nacos.example.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApplication.class, args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

}

服务类如下:

package com.nacos.example.consumer.controller;

import com.nacos.example.consumer.server.ProviderFeignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

@RequestMapping("/api/consumer")
@RestController
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private ProviderFeignService providerFeignService;

    @RequestMapping(value = "/echo1", method = RequestMethod.GET)
    public String echo1() {
        System.out.println("===========这是用restTemplate方式调用服务,带负载均衡。");
        return restTemplate.getForObject("http://service-provider/api/provider/echo", String.class);
    }

    @RequestMapping(value = "/echo2", method = RequestMethod.GET)
    public String echo2() {
        System.out.println("===========这是用FeignClient方式调用服务,带负载均衡。");
        return providerFeignService.echo();
    }

}

Feign接口如下:

package com.nacos.example.consumer.server;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient("service-provider")
public interface ProviderFeignService {

    @RequestMapping(value = "/api/provider/echo", method = RequestMethod.GET)
    String echo();
}

以上便是消费者的代码,其中关键点在于: 1. 在启动类标注 @EnableDiscoveryClient 注解; 2. 在 application.yml 中配置nacos服务中心的地址; 3. 在 controller 中使用RestTemplate 调用服务;4. 编写Feign接口,在 controller 中使用FeignClient调用服务。

步骤4:服务注册验证

服务提供者启动,提示nacos registry, DEFAULT_GROUP service-provider 192.168.0.115:8070 register finished,表示服务注册成功。

服务消费者启动,提示nacos registry, DEFAULT_GROUP service-consumer 192.168.0.115:8080 register finished,表示服务注册成功。

登录nacos控制台http://127.0.0.1:8848/nacos,查看服务列表,可以看到刚刚注册的服务。

步骤5:服务调用验证

访问地址:

http://127.0.0.1:8080/api/consumer/echo1

 

该请求是通过RestTemplate方式调用服务,代码如下:

 

访问地址:

http://127.0.0.1:8080/api/consumer/echo2
 

该请求是通过FeignClient方式调用服务,代码如下:

本示例开发参考了官方文档:Nacos Spring Cloud 快速开始Nacos Spring Cloud 快速开始https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html 

五、总结

云程低代码平台基于标准云原生架构开发,可以跟Nacos无缝集成,同时也支持与K8S、Rancher、阿里云平台、华为云平台等集成融合,欢迎访问官方体验站点:云程 | 云BPM,云程BPM,低代码平台,低代码开发平台,开源流程引擎,Camunda,flowable,业务流程管理,activiti,智能表单,电子表单,可视化开发,零代码开发,基础平台,流程PaaS,流程SaaS。


点击全文阅读


本文链接:http://zhangshiyu.com/post/29566.html

服务  版本  代码  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1