【Java】SpringCloud使用

SpringCloud使用

发起远程调用

根据订单id查询订单的同时,把订单所属的用户信息一起返回,但订单信息和用户信息分属两个不同的模块。
本质上是订单模块向用户模块发起请求,在spring中使用resttemplate发起。

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {    
	public static void main(String[] args) {       
	SpringApplication.run(OrderApplication.class, args);    
	}     
	@Bean    
	public RestTemplate restTemplate(){        
		return new RestTemplate();    
	}
}

搭建Eureka-server

  1. 引入依赖
<dependency>    
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  1. 在启动类上添加注解
    在这里插入图片描述
  2. 添加配置文件
server:
  port: 10086 # 服务端口
spring:
  application:
    name: eurekaserver # eureka的服务名称
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

注册客户端

  1. 引入pom依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 编写配置文件
spring: 
  application:
    name: userservice
    eureka:  
      client:    
      service-url:
        defaultZone: http://127.0.0.1:10086/eureka/
  1. 修改访问的路径,使用服务名代替ip+端口
    在这里插入图片描述
  2. 添加负载均衡注解,使服务可以随机访问

在这里插入图片描述

Ribbon负载均衡

Ribbon负载均衡规则

Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则。

在这里插入图片描述

内置负载均衡规则类规则描述
RoundRobinRule轮询index,选择index对应位置的Server
AvailabilityFilteringRule检查status里记录的各个服务的状态,过滤掉一直连接失败和高并发的服务器
WeightedResponseTimeRule根据响应时间加权,响应时间越长,权重越小,被选中的可能性越低
ZoneAvoidanceRule默认的负载均衡策略,使用Zone对服务器进行分类,即复合判断Server所在区域的性能和Server的可用性,再对同一个Zone内做轮询
BestAvailableRule选择一个最小的并发请求的server,如果Server被tripped了,则跳过
RandomRule随机选择一个可用的服务器
RetryRule对选定的负载均衡策略加上重试机制,在一个配置时间段内当 选择Server不成功,则一直尝试使用subRule的方式选择一个 可用的Server

Ribbon核心组件

在这里插入图片描述

ribbon的懒加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载.
在这里插入图片描述,

Spring配置刷新

参考这篇文章学习了一遍

在修改代码的时候发现了如下问题:

application.yml配置文件内容如下:

server:
  port: 8081
spring:
  application:
    name: userservice
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        prefix: ${spring.application.name}
        group: DEFAULT_GROUP
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/gotest?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  shardingsphere:
    sharding:
      default-database-strategy:
      tables:
#      discovery:
#        cluster-name: HZ
mybatis:
  type-aliases-package: cn.itcast.user.pojo
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
#eureka:
#  client:
#    service-url:  # eureka的地址信息
#      defaultZone: http://127.0.0.1:10086/eureka
pattern:
  name: 本地环境local

book:
  author: haha
  name: springcloudtest
  category: category01

按照dataid的格式: ${prefix}-${spring.profiles.active}.${file-extension}
此处读取的nacos中配置的dataid应当为userservice.yaml
实际生效的为userservice.properties

在这里插入图片描述
控制台无输出。

在这里插入图片描述
修改properties文件

在这里插入图片描述
在这里插入图片描述
控制台有输出,且请求对应有变化。
在这里插入图片描述

GateWay中的11种路由断言工厂

在这里插入图片描述

注意事项

  1. nacos默认是以集群方式启动的,安装nacos之后直接启动会报如下错误
    在这里插入图片描述
    需要修改启动命令为:startup.cmd -m standalone
    或者修改startup.cmd/startup.sh:
# startup.sh删除
export MODE="cluster"
# 调整为
export MODE="standalone"
  1. 启动eurekaserver的时候还可能出现这样的错误

参考资料

  1. SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程
  2. SpringCloud 源码系列(9)— 负载均衡Ribbon 之 核心组件与配置
  3. 面试官:如何设计一个Ribbon负载均衡组件
  4. SpringCloud实践系列(二):Ribbon负载均衡
  5. nacos官方文档
  6. SpringCloud使用Nacos保存和读取变量的配置方法
  7. Spring Cloud Alibaba(三) 搭建API网关 gateway动态路由
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值