Ribbon+eureka+springCloud2020.0.0 实现RestTemplate+LoadBalancerClient集群负载均衡
Eureka-server集群配置:
Eureka服务 一:
server:
port: 9003
#Eureka配置
eureka:
instance:
hostname: eureka9003.com #服务端实例名称
client:
register-with-eureka: false #表示是否向eureka注册中心注册自己
fetch-registry: false #为false代表自己为注册中心
service-url:
defaultZone: http://eureka9004.com:9004/eureka/ #为替换源码中的地址
spring:
application:
name: Eureka-server1
Eureka服务 二:
server:
port: 9003
#Eureka配置
eureka:
instance:
hostname: eureka9003.com #服务端实例名称
client:
register-with-eureka: false #表示是否向eureka注册中心注册自己
fetch-registry: false #为false代表自己为注册中心
service-url:
defaultZone: http://eureka9004.com:9004/eureka/ #为替换源码中的地址
spring:
application:
name: Eureka-server1
eureka-client-provider配置:
server:
port: 9001
mybatis:
type-aliases-package: com.yog.pojo
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
spring:
application:
name: provider
datasource:
type: com.alibaba.druid.pool.DruidDataSource #数据源
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:13306/cv?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
username: root
password: chenyonghui2
#配置Eureka 服务注册到哪里
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://eureka9003.com:9003/eureka/,http://eureka9004.com:9004/eureka/
instance:
instance-id: eureka-provider-client-9001 #配置实例名例
hostname: 127.0.0.1
info:
app.name: yog测试eureka注册中心
company.name: 陈永辉
build.artifactId: $project.artifactId$
build.version: $project.version$
eureka-client-consunmer配置:
server:
port: 9002
eureka:
client:
service-url:
defaultZone: http://eureka9004.com:9004/eureka/,http://eureka9003.com:9003/eureka/
# register-with-eureka: false
spring:
application:
name: consumer
小知识点:
1、provider&consumer虽然一个是server一个为client,但是相对与Eureka-server都是clien,所以应用eureka的jar时使用spring-cloud-starter-netflix-eureka-client即可。
2、在使用高版本的Eureka时,启动类可以不添加@EnableEurekaClient @EnableDiscoveryClient这两个注解。
3、在RestTemplate使用 @LoadBalanced注解做负载均衡时,实体类中务必添加无参构造(添加@NoArgsConstructor @AllArgsConstructor 也无效,必须手动添加)。
ServiceInstance instance = loadBalancerClient.choose("PROVIDER");
return restTemplate.getForObject(instance.getUri() + "/queryAll", List.class);
4、在使用DiscoveryClient做负载均衡时:
List<ServiceInstance> servicsIds = discoveryClient.getInstances("PROVIDER");
for (ServiceInstance servicsId : servicsIds) {
return restTemplate.getForObject("http://" + servicsId.getHost()+":"+servicsId.getPort() + "/queryAll", List.class);
}