Spring-Cloud

目录

父子项目        

Eureka

Openfeign

GateWay

全局配置 

局部配置

Nacos

启动nacos

nacos-spring-boot 

Nacos-spring-cloud

多配置时

命名空间​编辑

分组​编辑

         服务发现


父子项目        

        建立父项目,pom修改三个地方

                1.地方将依赖放到<dependencyManagement></dependencyManagement>里面

<dependencyManagement></dependencyManagement>

                2.第二个地方加入

 <packaging>pom</packaging>

                 3.第三个地方加入moudle这里面放子类项目名称

  <modules>
        <module>a-app</module>
        <module>eureka-server</module>
        <module>b-app</module>
        <module>spring-cloud-openfeign</module>
        <module>spring-cloud-api</module>
        <module>spring-cloud-gateway</module>
    </modules>

        建立子项目pom修改parent,将parent更改为父项目。

 <parent>
        <groupId>com.wzx</groupId>
        <artifactId>spring-cloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
    </parent>

               1.下面的一些版本号用父类的版本号,只有下方的版本号是子类的

 <artifactId>spring-cloud-gateway</artifactId>

                 2.删除子类的<dependencyManagement></dependencyManagement>的全部东西


Eureka

        Server配置

#单机
server:
  port: 8761  # eureka的默认端口  6379  8080  3306   8848
spring:
  application:
    name: eureka-server  # 应用名称 不要使用特殊字符
eureka: # eureka的配置分为三类 server  client  实例的  eureka-server既是服务端又是客户端
  server:
    eviction-interval-timer-in-ms: 10000 # 服务端间隔多少毫秒做定期删除的操作
    renewal-percent-threshold: 0.85 # 续约百分比 超过85%的应用没有和你续约 那么eureka会保护服务 不会剔除任何一个
  instance: # 实例的配置
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}   # 主机名称 : 应用名称 : 端口号
    hostname: localhost  # 主机名称 或者服务的ip
    prefer-ip-address: true # 以ip的形式显示具体的服务信息
    lease-renewal-interval-in-seconds: 5  # 服务实例的续约的时间间隔
  client:
    service-url:
      defaultZone: ${EUREKA_SERVER_URL:http://localhost:8761/eureka}
    register-with-eureka: ${REGISTER_WITH_EUREKA:true}  # 先将server自己注册自己的开关 关掉
    fetch-registry: true
# docker run -p 端口  -d 后台运行 --link 指定网络host文件映射的  -e MYSQL_ROOT_PASSWORD=123456 -v 文件挂载

# 集群
#server:
#    port: 8761  # eureka的默认端口  6379  8080  3306   8848
#spring:
#    application:
#        name: eureka-server  # 应用名称 不要使用特殊字符
#eureka:
#    client:
#        service-url: # 你不写 默认 8761
#            defaultZone: http://peer2:8762/eureka,http://peer3:8763/eureka
#    instance: # 实例的配置
#        instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}   # 主机名称 : 应用名称 : 端口号
#        hostname: peer1  # 主机名称 或者服务的ip
#        prefer-ip-address: true # 以ip的形式显示具体的服务信息
#        lease-renewal-interval-in-seconds: 5  # 服务实例的续约的时间间隔

#集群的终极方案
#server:
#    port: 8761  # eureka的默认端口  6379  8080  3306   8848
#spring:
#    application:
#        name: eureka-server  # 应用名称 不要使用特殊字符
#eureka:
#    client:
#        service-url: # 你不写 默认 8761
#            defaultZone: http://peer1:8761/eureka,http://peer2:8762/eureka,http://peer3:8763/eureka
#    instance: # 实例的配置
#        instance-id: ${spring.application.name}:${server.port}   # 主机名称 : 应用名称 : 端口号
##        hostname: peer1  # 主机名称 或者服务的ip
#        prefer-ip-address: true # 以ip的形式显示具体的服务信息
#        lease-renewal-interval-in-seconds: 5  # 服务实例的续约的时间间隔

        Client配置

server:
  port: 8080 # 客户端的端口没有要求
spring:
  application:
    name: eureka-client-a
# 注册的含义是什么? 就是将自己的一些信息(什么信息ip port...) 发送过去 (发到哪里)
eureka:
  client: # 客户端的相关配置
    service-url: # 指定注册的地址
      defaultZone: http://localhost:8761/eureka
    register-with-eureka: true  # 可以不往eureka-server注册
    fetch-registry: true  # 应用是否去拉去服务列表到本地
    registry-fetch-interval-seconds: 10  # 为了缓解服务列表的脏读问题 时间越短脏读越少  性能消耗大
  instance:
    hostname: localhost # 应用的主机名称 最好写主机ip
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}
    prefer-ip-address: true # 显示ip
    lease-renewal-interval-in-seconds: 10 # 示例续约的时间




#server:
#    port: 8080 # 客户端的端口没有要求
#spring:
#    application:
#        name: eureka-client-a
## 注册的含义是什么? 就是将自己的一些信息(什么信息ip port...) 发送过去 (发到哪里)
#eureka:
#    client: # 客户端的相关配置
#        service-url: # 指定注册的地址
#            defaultZone: http://peer1:8761/eureka,http://peer2:8762/eureka,http://peer3:8763/eureka
#        register-with-eureka: true  # 可以不往eureka-server注册
#        fetch-registry: true  # 应用是否去拉去服务列表到本地
#        registry-fetch-interval-seconds: 10  # 为了缓解服务列表的脏读问题 时间越短脏读越少  性能消耗大
#    instance:
#        hostname: localhost # 应用的主机名称 最好写主机ip
#        instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}
#        prefer-ip-address: true # 显示ip
#        lease-renewal-interval-in-seconds: 10 # 示例续约的时间

Openfeign


GateWay

        创建springboot项目,在依赖选择的地方

 一共是两个依赖

配置类里面的配置,我采用的是yml格式的配置文件

server:
  port: 8083
spring:
  application:
    name: gateway
  cloud:
    gateway:
      routes:
        - id: rout01
          uri: http://localhost:9091
#          uri: http://httpbin.org:80
          predicates:
            - Path=/a/**
          filters:
            - StripPrefix=1
            - AddRequestParameter=red, blue
            - AddRequestParameter=name, blue123
            - AddRequestHeader=name,5nifaiea8787808877
        - id: rout02
          uri: http://www.baidu.com/
          predicates:
            - Path=/b/**
          filters:
            - StripPrefix=1
#            - Cookie=mycookie,123
        - id: rout02
          uri: http://localhost:9091/
          predicates:
              - Path=/c/**
          filters:
              - StripPrefix=0
              - AddRequestParameter=name, blue123
      default-filters:
        - AddRequestHeader=sign,123 #添加请求头
        - AddRequestHeader=company,206 #添加请求头
     






server:
  port: 8083
spring:
  application:
    name: gateway
  cloud:
    gateway:
      routes:
        - id: rout01
          uri: http://localhost:9091
#          uri: http://www.baidu.com
          predicates:
            - Path=/a/**
          filters:
            - StripPrefix=
#            - Cookie=mycookie,123
            - AddRequestParameter=red, blue
            - AddRequestParameter=name, blue123
            - AddRequestHeader=name,5nifaiea8787808877
   default-filters:
            - AddRequestHeader=sign,123 #添加请求头
            - AddRequestHeader=company,206 #添加请求头

解析:

uri: http://localhost:9091:跳转的链接

- Path=/a/**:需要拦截的        比如loclahost:8083/a/XXX        这个就会被拦截然后进入uri的链接里面

- StripPrefix=1:拦截的前缀        当前缀是1 链接为 http://localhost:9091

- Cookie=mycookie,123:加入cookie验证,只有当mycookie等于123的时候才会允许进入

全局配置

default-filters:

- AddRequestHeader=sign,123 #添加请求头

- AddRequestHeader=company,206 #添加请求头

全局配置 

        加入filter类,里面的类继承GlobalFilter, Ordered,这里面的IdUtil是hutto第三方的工具包

public class CustomGlobaFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpRequest request1 = request.mutate().header("traceid", IdUtil.fastUUID()).build();
        return chain.filter(exchange.mutate().request(request1).build());
    }

    @Override
    public int getOrder() {
        return -1;
    }
}

        加入配置

@Configuration
public class FilterConfig {
    @Bean
    public GlobalFilter customFilter(){
        return new CustomGlobaFilter();
    }
}

局部配置

       

server:
  port: 8083
spring:
  application:
    name: gateway
  cloud:
    gateway:
      routes:
        - id: rout01
          uri: http://localhost:9091
#          uri: http://httpbin.org:80
          predicates:
            - Path=/a/**
          filters:
            - StripPrefix=1
            - AddRequestParameter=red, blue
            - AddRequestParameter=name, blue123
            - AddRequestHeader=name,5nifaiea8787808877
        - id: rout02
          uri: http://www.baidu.com/
          predicates:
            - Path=/b/**
          filters:
            - StripPrefix=1
#            - Cookie=mycookie,123
        - id: rout02
          uri: http://localhost:9091/
          predicates:
              - Path=/c/**
          filters:
              - StripPrefix=1
              - AddRequestParameter=name, blue123
              - ElapsedTime
      default-filters:
        - AddRequestHeader=sign,123 #添加请求头
        - AddRequestHeader=company,206 #添加请求头
- ElapsedTime:加入ElasedTime就可以激活局部拦截,这里就是在访问C的时候就会进行拦截,在访问a或b的时候不会进行拦截

        在类filter里面写入

//记录接口耗时
public class ElapsedTimeGatewayFilter implements GatewayFilter, Ordered {
    private final static String BEAGIN = "begin";

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        exchange.getAttributes().put(BEAGIN, System.currentTimeMillis());

        return chain.filter(exchange).then(
                Mono.fromRunnable(() -> {
                    long startTime = exchange.getAttribute(BEAGIN);
                    long endTime = System.currentTimeMillis();
                    String url = exchange.getRequest().getURI().getRawPath();
                    System.out.println(StrUtil.format("{}耗时:{}", url, endTime - startTime));

                })

        );
    }

    @Override
    public int getOrder() {
        return Ordered.HIGHEST_PRECEDENCE;
    }
}
@Component
public class ElapsedTimeGatewayFilterFactory extends AbstractGatewayFilterFactory<Object> {
    @Override
    public GatewayFilter apply(Object config) {
        return new ElapsedTimeGatewayFilter();
    }
}

Nacos

        在docker里面安装Nacos

        cd /opt
  git clone https://github.com/nacos-group/nacos-docker.git

这里如果没有git组件就会报错

解决方法 

dnf install git -y

 如果docker没有办法连外网

 如何判断是否可以连外网:在docker里面ping www.baidu.com

解决方法

cd /etc/
ls
vi resolv.conf

修改配置文件

再次ping www.baidu.com,ping通过了

 dnf install git -y
cd nacos-docker
docker-compose -f example/standalone-derby.yaml up

如果docker没有 docker-compose组件的话

 解决方法

dnf install docker-compose

启动nacos

cd /opt
cd nacos-docker
docker-compose -f example/standalone-derby.yaml up

解决方式:

 docker ps -a

查找顺序删除

         nacos/nacos-server:v2.1.0 

         prom/prometheus:latest 

         grafana/grafana:latest 

再次启动nacos就可以了

docker-compose -f example/standalone-derby.yaml up

nacos-spring-boot 

加入依赖

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
            <version>0.2.11</version>
        </dependency>

配置类里面写入

spring.application.name= nacos-config-demo
nacos.config.server-addr=XXXXXX

spring.application.name= nacos-config-demo
nacos.config.server-addr=XXXXXX

XXXXXX:这里是你的nacos的地址 例如 192.168.168.168:8848

nacos-config-demo:这里是你nacos里面新建配置的Data ID

 在项目启动类加入一个注解

@NacosPropertySource(dataId = "nacos-config-demo", autoRefreshed = true)

 @NacosPropertySource(dataId = "nacos-config-demo", autoRefreshed = true)

nacos-config-demo:是你新建配置的Data ID

加入一个controller类

@RestController
public class ConfigController {

    @NacosValue(value = "${girl:拉姆}", autoRefreshed = true)
    private String girl;

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

 在nocas里面新建配置

配置内容是你想要相应的内容 

 新建成功后是上面的样子,这时候我们运行项目。在配置信息对应的情况下,相应的是我们配置内容里面的信息,不然就是我们controller里面value里面的信息

Nacos-spring-cloud

        配置类

        加入依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2021.1</version>
        </dependency>

建立一个bootstrap.properties配置文件,这个配置文件的目的是提前加载里面的配置,以下所有的配置信息都是再bootstrap.properties里面配置

spring.application.name=nacos-cloud-config-demo
spring.cloud.nacos.config.server-addr=XXXXXX

spring.application.name=nacos-cloud-config-demo

spring.cloud.nacos.config.server-addr=XXXXX

nacos-cloud-config-demo:Data ID

cloud:这里是与boot配置不一样的位置

cloud的启动类不需要加入注解

配置类多了一个

@RefreshScope  //自动刷新
@RefreshScope  这个注解是自动刷新的作用
@RestController
@RefreshScope  //自动刷新
public class ConfigController {


    @Value(value="${girl:林青霞}")
    private String girl;

    @GetMapping(value = "/test")

    public String test() {
        return girl;
    }
}

 在nocas里面新建配置,与上面boot一致

  新建成功后是上面的样子,这时候我们运行项目。在配置信息对应的情况下,相应的是我们配置内容里面的信息,不然就是我们controller里面value里面的信息。

       多配置时

                在配置里面加入,就可以在nocas里面进行,这里的后缀要写出来,不然不会导出里面的内容

spring.profiles.active=dev

命名空间

创建命名空间后再新建配置的时候就可以选择命名空间新建

 再配置类写入对应的命名空间,就可以访问命名空间里面对应的内容

spring.cloud.nacos.config.namespace=206-wzx

分组

这样就可以分组成功,分组成功后,再新建配置的时候就可以选择分组创建

 在配置里加入配置分组就可以访问分组里面对应的内容

spring.cloud.nacos.config.group=wzx-1

服务发现

加入依赖

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

加入配置,配置对应的功能是一样的

server.port=8070
spring.cloud.nacos.discovery.server-addr=XXXX
spring.cloud.nacos.discovery.namespace= 206-wzx
spring.cloud.nacos.discovery.group=wzx-1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值