用Nacos搭建微服务操作

Nacos服务搭建

我们首先在Nacos的GitHub中下载相关的安装文件。https://github.com/alibaba/nacos/releases

用Nacos搭建微服务操作_第1张图片

但是因为服务器在国外,所以我们直接给大家提供了对应的安装文件。直接解压缩到非中文的目录下,然后启动即可

用Nacos搭建微服务操作_第2张图片

用Nacos搭建微服务操作_第3张图片

服务访问的地址是:http://localhost:8848/nacos

用Nacos搭建微服务操作_第4张图片

Nacos服务注册

引入相关的依赖文件:

 <dependency>
     <groupId>com.alibaba.cloudgroupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
 dependency>

放开注册中心:@EnableDiscoveryClient

// 放开注册中心
@EnableDiscoveryClient
@SpringBootApplication
// 指定Mapper接口对应的路径
@MapperScan("com.msb.mall.product.dao")
public class MallProducetApplication {

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

}

然后需要在配置问中配置注册中心的相关信息

用Nacos搭建微服务操作_第5张图片

然后重启服务,我们就可以在注册中心中发现对应的服务注册信息了

用Nacos搭建微服务操作_第6张图片

那么安装相同的步骤,完成其他几个微服务的注册

用Nacos搭建微服务操作_第7张图片

Nacos容器中安装

为了使用的方便,我们将Nacos安装到Docker容器中

首先我们需要拉取对应的镜像文件

docker pull nacos/nacos-server:1.4.2

通过镜像文件运行nacos容器

docker run -d --env MODE=standalone --name nacos -v /mydata/nacos/conf:/home/nacos/conf -p 8848:8848 nacos/nacos-server:1.4.2

安装中如果出现了如下的提示

用Nacos搭建微服务操作_第8张图片

那么就把windows中的安装文件中的conf目录的文件上传到虚拟机中,目前测试下来无论有没有报错都最好把windows的conf下内容上传一下,不然可能nacos不能访问

用Nacos搭建微服务操作_第9张图片

服务启动时间比较长,耐心等待一会

启动容器后,测试访问:

http://192.168.56.100:8848/nacos 默认的账号密码:nacos nacos

用Nacos搭建微服务操作_第10张图片

设置nacos服务自启动

docker update --restart=always  nacos

用Nacos搭建微服务操作_第11张图片

然后将众多的微服务的注册中心地址修改为docker容器中的注册中心地址:

用Nacos搭建微服务操作_第12张图片

看到注册信息就表示操作成功了

用Nacos搭建微服务操作_第13张图片

OpenFegin服务调用

OpenFegin是一个声明式的服务调用组件。本质上是封装的Ribbon实现的。

用Nacos搭建微服务操作_第14张图片

商品服务定义接口

我们在商品服务中定义一个对外提供功能的接口

用Nacos搭建微服务操作_第15张图片

订单服务中调用

我们在订单服务中集成OpenFegin,完成对应的商品服务调用

引入相关的依赖

<dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>

然后创建对应的Fegin接口

/**
 * @FeignClient 指明我们要从注册中心中发现的服务的名称
 */
@FeignClient(name = "mall-product")
public interface ProductService {

    /**
     * 需要访问的远程方法
     * @return
     */
    @GetMapping("/product/brand/all")
    public R queryAllBrand();
}

还需要在启动类中开启远程调用

/**
 * basePackages 制定Fegin接口的路径
 */
@EnableFeignClients(basePackages = "com.msb.mall.order.fegin")
@EnableDiscoveryClient
@SpringBootApplication
@MapperScan("com.msb.mall.order.dao")
public class MallOrderApplication {

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

}

然后在Order的控制期中完成商品服务的调用

    @Autowired
    ProductService productService;

    @GetMapping("/products")
    public R queryProduct(){
        // OpenFegin 远程调用服务
        return R.ok().put("products",productService.queryAllBrand());
    }

启动服务报错

用Nacos搭建微服务操作_第16张图片

然后就把相关的依赖添加上就可以了

        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-loadbalancerartifactId>
        dependency>

如果请求的时候,发现还报错

用Nacos搭建微服务操作_第17张图片

在nacos的依赖中需要过滤netflix-ribbon

用Nacos搭建微服务操作_第18张图片

<exclusions>
    <exclusion>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </exclusion>
</exclusions>

image.png

通过@RefreshScope来动态的刷新配置数据,注解的位置写在Controller中

用Nacos搭建微服务操作_第19张图片

最后我们通过@Value(“#{}”) 来获取配置中心中的数据,配置中心的数据优先于application.yml中的属性信息

用Nacos搭建微服务操作_第20张图片

在对应的命名空间下创建对应的配置文件

用Nacos搭建微服务操作_第21张图片

默认使用的public命名空间,如果要使用特定的命名空间的话,我们需要在bootstrap.properties中显示的指定使用的命名空间

用Nacos搭建微服务操作_第22张图片

然后通过配置分组来区分不同的开发环境【开发环境dev,测试环境test,生产环境prod】用Nacos搭建微服务操作_第23张图片

也就在具体的命名空间下我们创建的多个环境对应的配置文件

用Nacos搭建微服务操作_第24张图片

Nacos配置中心

配置中心的基本使用

首先添加对应的依赖,因为其他的微服务也需要向配置中心中获取配置信息,所以对应的依赖我们添加在了commons模块中

        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-bootstrapartifactId>
            <version>3.0.3version>
        dependency>

创建bootsrap.properties文件,这个文件会优先于application.yml文件加载

spring.application.name=mall-order
spring.cloud.nacos.config.server-addr=192.168.56.100:8848

在nacos服务中创建对应的数据集,名称是应用名称.properties ,mall-order.properties

用Nacos搭建微服务操作_第25张图片

命名空间和配置分组

我们在Nacos配置中心中是通过命名空间和配置分组来管理我们众多的配置信息

首先我们通过命名空间来隔离服务,给每一个服务创建一个对应的命名空间

用Nacos搭建微服务操作_第26张图片

如果我们需要加载对应的配置组中的信息,那么同样的需要在bootstrap.properties中设置对应的配置组信息

用Nacos搭建微服务操作_第27张图片

配置拆分

我们现在是将某个服务中的所有的配置都写在了同一个配置文件中。为了方便管理,我们可以将配置信息拆分到配置中心中。

我们可以将配置文件中的数据源,mybatis的配置信息以及其他的信息拆分开来

用Nacos搭建微服务操作_第28张图片

然后在bootstrap.properties中的指定

```properties
spring.application.name=mall-order
spring.cloud.nacos.config.server-addr=192.168.56.100:8848
# 指定使用的命名空间
spring.cloud.nacos.config.namespace=638a5c2f-488f-4fa4-b7d3-1533d772e715
# 指定对应的配置组
spring.cloud.nacos.config.group=prod

# 配置多个配置集
spring.cloud.nacos.config.ext-config[0].data-id=mybats.yml
spring.cloud.nacos.config.ext-config[0].group=prod
spring.cloud.nacos.config.ext-config[0].refresh=false

spring.cloud.nacos.config.ext-config[1].data-id=datasourc.yml
spring.cloud.nacos.config.ext-config[1].group=prod
spring.cloud.nacos.config.ext-config[1].refresh=false

spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=prod
spring.cloud.nacos.config.ext-config[2].refresh=false

网关Gateway

网关基本介绍

  在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平台无关的服务协议作为各个单元间的通讯方式。

用Nacos搭建微服务操作_第29张图片

  本系统中我们选择的是Gateway作为我们的网关组件,Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。

  网关有几个非常重要的概念:

  • Route(路由):这是网关的基本构建块,它由一个ID,一个目标URI,一组断言和一组过滤器定义,如果断言为真,则路由匹配
  • Predicate(断言):是Java8中提供的函数式接口,用来判断是否路由匹配的
  • Filter(过滤器):对断言匹配的请求和响应进行修改处理

在这里插入图片描述

网关应用

创建网关API服务,修改SpringBoot和SpringCloud相关版本和其他的微服务保持一致。

然后添加对应的依赖

        <dependency>
            <groupId>com.msb.mallgroupId>
            <artifactId>mall-commonsartifactId>
            <version>0.0.1-SNAPSHOTversion>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-gatewayartifactId>
        dependency>

因为网关服务路由的时候需要去注册中心中发现相关的服务所以需要完成Nacos注册中心的配置

# 注册中心的配置
spring.application.name=mall-gateway
spring.cloud.nacos.discovery.server-addr=192.168.56.100:8848

# 指定注册中心的服务端口
server.port=8070

放开注解

用Nacos搭建微服务操作_第30张图片

同样的网关中的相关配置我们也需要添加到Nacos的配置中心中,所以也需要整合Nacos配置中心

用Nacos搭建微服务操作_第31张图片

然后我们测试路由规则是否可行

spring:
  application:
    name: mall-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.56.100:8848
    gateway:
      routes: 
        - id: route1
          uri: http://www.baidu.com
          predicates:
            - Query=url,baidu
        - id: route2
          uri: http://www.jd.com
          predicates: 
            - Query=url,jd

启动时候因为依赖的commons服务中有MyBatis的依赖,那么在网关API服务中也需要数据源的相关配置,那么没有就抛异常,这时我们可以在启动类的SpringBootApplication注解中排除DataSourceAutoConfiguration的自动注入。

用Nacos搭建微服务操作_第32张图片

然后根据对应的路由规则测试即可:

http://localhost:8070/?url=baidu

http://localhost:8070/?url=jd

你可能感兴趣的:(JAVA,spring,boot,docker,微服务,java,spring,cloud,nacos)