欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringCloud微服务学习----------Ribbon负载均衡

程序员文章站 2022-06-22 19:28:04
...

SpringCloud微服务学习----------Ribbon负载均衡

RIBBON实现软负载均衡如下三点

SpringCloud微服务学习----------Ribbon负载均衡

服务发现就是依据名字把所属的实例全部找出来,

服务规则就是如何从多个实例种选出一个实例来服务,

服务监听就是检查出失效的服务,高效剔除

流程如下

SpringCloud微服务学习----------Ribbon负载均衡

通过ServerList查出所有可用列表,然后通过ServerListFilter过滤掉一部分地址,最后再从IRule中选出一个服务为此次服务

默认的负载均衡策略是轮询下面建立一个小测试测试一下

首先建立两个服务 并注册一个名字,然后里面一个内容写1,一个写2

server.port=30525

#applications
spring.datasource.url=jdbc:oracle:thin:@192.168.66.226:1521:znjt
spring.datasource.username=znjtpostman
spring.datasource.password=znjtpostman
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver

#mybatis
#mybatis.mapper-locations=classpath:/mappers/postman/*Mapper.xml
mybatis.mapper-locations=classpath*:com/sola/mappers/**/*.xml
#mybatis.type-aliases-package=briliance.znjt.business.template.entity

spring.application.name=EurekaClient-PostMan

eureka.client.service-url.defaultZone: http://localhost:30520/eureka/,http://localhost:31520/eureka/
server.port=30522

#applications
spring.datasource.url=jdbc:oracle:thin:@192.168.66.226:1521:znjt
spring.datasource.username=znjtpostman
spring.datasource.password=znjtpostman
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver

#mybatis
#mybatis.mapper-locations=classpath:/mappers/postman/*Mapper.xml
mybatis.mapper-locations=classpath*:com/sola/mappers/**/*.xml
#mybatis.type-aliases-package=briliance.znjt.business.template.entity

spring.application.name=EurekaClient-PostMan

eureka.client.service-url.defaultZone: http://localhost:30520/eureka/,http://localhost:31520/eureka/

SpringCloud微服务学习----------Ribbon负载均衡

然后我们去建立个服务去调用测试

package com.sola.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import com.sola.dao.RoadWorkDao;

@Service
public class RoadWorkService {
	
	@Autowired
	private RoadWorkDao resourcesdao;
	@Autowired
	private RestTemplate resttemplate;

	public Map<String, Object>  findroadwork() {
		// TODO Auto-generated method stub
		List<Map<String, Object>> list = null ;
		Map<String,Object> map = new HashMap<>();
		
		list = resourcesdao.findroadwork();
	
		String forObject = resttemplate.getForObject("http://EUREKACLIENT-POSTMAN/eurekaApi/test", String.class);
		
		map.put("postman", forObject);
		map.put("data", list);
		
		return map;
	}

}

SWAGGER测试结果

SpringCloud微服务学习----------Ribbon负载均衡SpringCloud微服务学习----------Ribbon负载均衡

点一下换一次说明默认确实是轮询

可更换几种负载方式

https://blog.csdn.net/liuchuanhong1/article/details/54693124

代码示例

在调用服务的application.properties配置加入

EUREKACLIENT-POSTMAN.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
//格式 实例名字.固定格式
//这个是测试了一个随机服务

测试真的按照了随机来调用服务=。=