一个简单的Ribbon实现负载均衡(springcloud)

Ribbon是一个是一个基于HTTP和TCP的客户端负载均衡工具。
它也是我们springcloud经常使用的负载均衡。
一个简单的Ribbon实现负载均衡(springcloud)_第1张图片
负载均衡就是通过一系列手段(如心跳访问)等将访问合理的分配给有足够处理能力的服务段。
具体实现这里不细讲,细讲我也不会。
我只展示下springcloud怎么实现的

在展示之前说下需要的:

服务端:2个以上,我们可以用2个简单的springboot jpa项目代替(数据库有没有内容无所谓,只要能打开页面就OK,如下图)
一个简单的Ribbon实现负载均衡(springcloud)_第2张图片
Eureka的server端(可要可不要,不使用Eureka也是可以负载均衡,而且操作不变,但实际这2个一般是一起出现的)
如果你没有以上的,可以使用我的,也可以自己做个,几分钟的事情吗。

https://github.com/lihang212010/Ribbon

然后讲解的是搭载Ribbon的项目(Eureka中包含Ribbon,因此Eureka也可以)
在本项目中,我们需要一个和服务端数据库相同的POJO,但是这一步并不重要,因此这一步代码放在最后面。

首先我们添加依赖(Eureka的依赖如果存在,则不需要在添加了,因为Eureka里有这个)

		
			org.springframework.cloud
			spring-cloud-starter-netflix-ribbon
		

如果你的版本过新或者程序出现okhttp3报错,则需要在添加okhttp3依赖,老版本自带这个。

        
            com.squareup.okhttp3
            okhttp
            3.6.0
        

完整的pop.xml我发github上了,这都不是重点。

重点是下面这个,首先我们创建个bean

@Bean
 @LoadBalanced
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}

RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率,所以很多客户端比如 Android或者第三方服务商都是使用 RestTemplate 请求 restful 服务
@LoadBalanced是Ribbon的注解,只需要添加次注解,便自动开启负载均衡了

然后我们在控制器添加这些

@RestController
public class MoviesController {

	@Autowired
	private RestTemplate restTemplate;

	@RequestMapping("/user/{id}")
	public Users findById(@PathVariable Long id) {
		return this.restTemplate.getForObject("http://demo-cloud-user/"+id, Users.class);
	}	
		
	} 

demo-cloud-user是服务端的名字

getForObject() 发送一个HTTP GET请求,返回的请求体将映射为一个对象

然后我们可以开启2个以上服务端(修改端口即可),如果Eureka项目则开启后在开启这个项目,没有直接开启刚刚我们写的这个项目
访问 http://localhost:8010/user/1 ,多访问几次,我们会发现控制台中的服务端会显示多次访问记录,这些访问会按照某种规则平衡的分配给每个服务器。
这时我们的负载均衡便搭建好了。

Ribbon的分配规则是可以更改的,在springcloud中有3种方式更改,我只贴出最常用的一种。
配置更改在yml文件中添加

demo-cloud-user:
  ribbon:
         NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
        

demo-cloud-user是服务端名字
如果不是yml文件

demo-cloud-user.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

总共7种访问策略,字太多,懒得打。大家自己查。

你可能感兴趣的:(springcloud,中间件)