SpringCloud.02.远程消费以及配置中心

目录

远程消费讲解:

步骤一:生产者提供接口

步骤二:开启Feign功能

步骤三:配置DTO

步骤四:消费者调用生产者接口

配置中心讲解:

步骤一:导入依赖

步骤二:bootstrap.yml 讲



上一篇文章我们讲到了springcloud基本配置和运行,接下来让我们进一步了解springcloud的使用。springcloud的基本使用与Nacos

在cloud的pom.xml文件下导入依赖用来替换Srping Cloud Loadbalancer

使用 Feign( 开启负载均衡 )
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

远程消费讲解:

我们已经知道cloud有provider和consumer两个模块,所谓远程消费就是通过消费者调用生产者的接口,那么该怎么调用呢?

步骤一:生产者提供接口

生产者提供接口
可以使用以下几个注解接收远程调用的参数值
@PathVariable
@RequestParam
@RequestBody
首先我们在provider下创建一个userController
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {

    @Autowired
    private MapperFactory factory;

    //只要参数是复杂对象,即使指定了是GET方法,
    // feign依然会以POST方法进行发送请求,同时生产者必
    //须支持POST请求并给参数添加@RequestBody注解

    // 请求接受参数
    // 1.路径接受参数
    // 2.接受多个参数
    // 3.使用对象接受
    // 3.使用Map接受
    @RequestMapping("/{account}")
    public String getByPath(@PathVariable("account") String account) {
        log.info("account:{}",account);//日志打印
        return "这里是生产者provider";
    }

    @RequestMapping("/param")
    public String getByParam(@RequestParam("account") String account,
                             @RequestParam("password") String password) {
        log.info("account:{},password:{}",account,password);//日志打印
        return "这里是生产者provider";
    }


    @RequestMapping("/pojo")
    public String getByPojo(@RequestBody UserDto dto) {
        //将dto中与user相关的属性拿出来给到User对象
        User u = new User();
   
        BeanUtils.copyProperties(user,u);
        log.info("userDto:{}",u);//日志打印
        return "这里是生产者provider";
    }

}

步骤二:开启Feign功能

消费者需要开启Feign功能

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {
}
创建Server, 并使用 Feign 表示其需要远程对接的服务名称 , 并使用 @RequestMapping表示其映射的
路径
//连接生产者的controller
@FeignClient("provider")
//@RequestMapping("/user")
public interface FeignUserService {

    @RequestMapping("/user/{account}")
    String getByPath(@PathVariable("account") String account);

    @RequestMapping("/user/param")
    String getByParam(@RequestParam("account") String account,
                             @RequestParam("password") String password);

    @RequestMapping("/user/pojo")
    public String getByPojo(@RequestBody UserDto user);
}
FeignClient 接口 , 不能使用 @GettingMapping 之类的组合注解
FeignClient 接口中,如果使用到 @PathVariable 必须指定其 value
当使用 feign 传参数的时候 , 需要加上 @RequestParam 注解 , 否则对方服务无法识别参数

步骤三:配置DTO

DTO 封装
VO View Object ):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据
封装起来。
DTO Data Transfer Object ):数据传输对象,这个概念来源于 J2EE 的设计模式,原来的目的是
为了 EJB 的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的
性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。
DO Domain Object ):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。
PO Persistent Object ):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一
一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应
PO 的一个(或若干个)属性。
消费者 远程调用 生产者 : 需要网络传输,使用DTO同一封装对象
原理与 SpringBoot 启动类相同
1. DTO 对象封装到公共 DTO 模块
2. 为需要的项目引入公共 DTO 模块
注意点
1. 不需要继承父模块 ( 重复引用问题 )
2. 打包方式为 jar
3. 不需要添加启动类的编译
在cloud在创建一个maven项目命名common,消费者和生产者都要使用到。用来存放UserDto
common的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">

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

    <modelVersion>4.0.0</modelVersion>
    <artifactId>common</artifactId>
    <packaging>jar</packaging>


</project>

步骤四:消费者调用生产者接口

/调用生产者
    @Autowired
    private FeignUserService userService;


    @RequestMapping("/test01")
    public String test01() {
        return userService.getByPath("root");
    }

    @RequestMapping("/test02")
    public String test02() {
        return userService.getByParam("root","123");
    }

    @RequestMapping("/test03")
    public String test03() {
        return userService.getByPojo(new UserDto(1L,"小黑子","123123"));
    }

配置中心讲解:

服务端也称为分布式配置中心 , 他是一个独立的微服务应用 , 用来连接配置服务器并为客户端提供获取配置
信息 , 加密 / 解密 信息等访问接口。
客户端则是通过制定的配置中心来管理应用资源 , 以及与业务相关的配置内容 , 并在启动的时候从配置中心
获取和加载配置信息配置服务器默认采用 git 来存储配置信息 , 这样就有助于对环境配置进行版本管理 ,
且可以通过 git 客户端工具来方便的管理和访问配置内容。
一个使用微服务架构的应用系统可能会包括成百上千个微服务 , 配置各部相同 , 需求各不相同:
不同环境不同配置:例如数据源在不同的环境(开发 , 测试 , 生产)是不同的 , 可以通过配置中心
运行期间可以动态调整。例如根据各个微服务的负载状况 , 动态调整数据源连接池大小或者熔断阀
, 并且调整时不停止微服务(配置修改后可以自动更新)
大白话就是说我们的项目会被部署到不同的环境中,我们可以通过nacos在配置中心修改它,并且调整的时候不中断微服务也就是项目的运行。

步骤一:导入依赖

nacos config 导入依赖 provider或者cloud都可以
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
Spring Cloud Alibaba Nacos Config Nacos 提供用于存储配置和其他元数据的 key/value 存储 , 为分布
式系统中的外部化配置提供服务器端和客户端支持。
使用 Spring Cloud Alibaba Nacos Config, 您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外
部属性配置。
Spring Cloud Alibaba Nacos Config Config Server Client 的替代方案 , 客户端和服务器上的概念与
Spring Environment PropertySource
有着一致的抽象
在特殊的 bootstrap 阶段 , 配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生
产时 , 您可以管理这些环境之间的配置 , 并确保应用程序具有迁移时需要运行的所有内容。

步骤二:bootstrap.yml 讲解

SpringBoot 默认支持 properties YAML 两种格式的配置文件。
bootstrap.yml bootstrap.properties )用来程序引导时执行 , 应用于更加早期配置信息读取 , 如可以使
用来配置 application.yml 中使用到参数等
application.yml application.properties) 应用程序特有配置信息 , 可以用来配置后续各个模块中需使用
的公共参数等。
bootstrap.yml 先于 application.yml 加载
导入依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

配置bootstrap.yml

spring:
application:
# 会自动根据服务名拉取data-id对应的配置文件.如果data-id跟服务名不一致 就需要手动指定
data-id
# 跟服务名相同的data-id的配置文件,称之为默认的配置文件
# 除了默认的配置文件,其他配置文件必须写上后缀
name: xx
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
# username: nacos
# password: nacos
config:
prefix: ${spring.application.name}
#指定nacos配置中心地址
server-addr: 127.0.0.1:8848
file-extension: yaml # 使用的 nacos 配置集的 dataId 的文件拓展名,同时也是
Nacos 配置集的配置格式,默认为 properties
namespace: f1896568-xxxx-45d8-8a93-a64c5bcc22ff # 使用的 nacos 的命名空间,
默认为 null
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
# 共享配置集数组
shared-configs:
- data-id: shared-dataId-01.yaml
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
refresh: true # 是否自动刷新配置,默认为 false
@RefreshScope 实现配置实时更新
jar
java -jar xx.jar
java -jar xx.jar --spring.cloud.nacos.config.namespace=xxx
- data-id: shared-dataId-02.yaml
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
refresh: true # 是否自动刷新配置,默认为 false
#要导入的其它配置文件的data-id,多个之间使用逗号分隔
shared-dataids: a.yml,b.yml
refreshable-dataids: a.yml,b.yml

我们可以通过操作bootstrap.yml 中的spring.cloud.nacos.config.namespace 来部署不同的环境,namespcace来自nacos中的服务管理的命名空间可以进行添加。

最后通过maven打成jar包,将provider.jar 在cmd中运行即可 
jar
java - jar xx.jar
java - jar xx.jar -- spring.cloud.nacos.config.namespace=xxx
  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值