阅读 73

Spring Cloud微服务解决方案初探

毕业版本依赖关系

Spring Cloud Version Spring Cloud Alibaba Version Spring Boot Version
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.2.RELEASE 2.0.X.RELEASE
Spring Cloud Edgware 1.5.1.RELEASE 1.5.X.RELEASE

Nocas

Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理

Spring Cloud 集成Nacos

安装

 tar -xvf nacos-server-$version.tar.gz
复制代码
sh startup.sh -m standalone      standalone代表着单机模式运行
复制代码

作为配置中心的用法

  • pom文件配置
 <dependencies>
 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
复制代码
  • yml文件中配置
server:
  port: 8086
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.223.130:8848
  application:
    name: test2
复制代码
  • 在配置类上通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能
@SpringBootApplication
@EnableDiscoveryClient
public class Demo2Application {
    public static void main(String[] args) {
        SpringApplication.run(Demo2Application.class);
    }
}
复制代码

验证访问 Nacos服务ip:8848/nocas服务配置即出现相应列表

Feign 远程调用

在Nocas中注册两个服务,一个作为调用方demo1,一个作为被调用方demo2

server:
  port: 8085
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.223.130:8848
  application:
    name: demo1
复制代码
  port: 8086
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.223.130:8848
  application:
    name: demo2
复制代码
  • 调用方使用xml配置
 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
 </dependency>
复制代码
  • 被调用方接口
@RestController
@RequestMapping("/demo2")
public class TestController {

    @GetMapping("/test")
    public String  get(){
        return "124";
    }
}
复制代码
  • 调用方配置

编写接口,在接口上添加@FeignClient,value值是被调用方服务名称,添加被调用方法的方法签名

@FeignClient("test2")
public interface Feign {
    @GetMapping("/demo2/test")
    String get();
}
复制代码

调用接口

@RestController
@RequestMapping("demo")
public class TestController {
    @Autowired
    Feign feign;
    @GetMapping("get")
    String test(){
        return   feign.get();
    }
}
复制代码

配置使用Feign客户端

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.demo.test.feign")
public class Demo1Application {
    public static void main(String[] args) {
        SpringApplication.run(Demo1Application.class);
    }
}
复制代码

发送调用方的接口请求,收到被调用方的响应结果

Nacos 作为配置中心

pom文件

  <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
复制代码

新建 bootstrap.yml 中配置

spring:
  cloud:
    nacos:
      config:
        server-addr: 192.168.223.130:8848
        file-extension: yaml
复制代码

编写测试接口,@RefreshScope实现动态刷新,启动程序时,spring会从Nacos的配置中心格式为${prefix}-${spring.profiles.active}.${file-extension}的dataId获取对应的配置变量

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 prefix.{prefix}.{file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。默认是properties
@RestController
@RefreshScope
@RequestMapping("/demo2")
public class TestController {

    @GetMapping("/test")
    public String get() {
        return "123";
    }

    @Value("${user.name}")
    private String name;

    @Value("${user.age}")
    private Integer age;

    @Override
    public String toString() {
        return "TestController{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @GetMapping("user")
    public String user() {
        return toString();
    }
}
复制代码

由于application.yml 文件配置的spring.application.name=test2,在Nacos首页添加配置

访问

修改配置内容可实现动态获取,无需重启应用(有网络延迟)

文章分类
后端
文章标签