Spring Cloud Ribbon

ribbon是什么

目前主流的负载方案分为两种:一种是集中式负载均衡,在消费者和服务提供方中间 使用独立的代理方式进行负载,有硬件的(比如 F5 ),也有软件的(比如 Nginx)。 另一种 则是客户端自己做负载均衡,根据自己的请求情况做负载, Ribbon 就属于客户端自己做负载的。
一句话介绍那就是: Ribbon 是 Netflix 开源的一款用于客户端负载均衡的工具软件。

Ribbon 模块如下:

  • ribbon-loadbalancer 负载均衡模块,可独立使用,也可以和别的模块一起使用。 Ribbon 内置的负载均衡算法都实现在其中。
  • ribbon-eureka:基于 Eureka 封装的模块,能够快速方便地集成 Eureka。
  • ribbon-transport: 基于 Netty 实现多协议的支持,比如 H坤、 Tep、 Udp 等。
  • ribbon-httpclient :基于 Apache HttpClient 封装的 REST 客户端,集成了负载均衡模 块,可以直接在项目中使用来调用接口 。
  • ribbon-example: Ribbon 使用代码示例,通过这些示例能够让你的学习事半功倍。
  • ribbon-core:一些比较核心且具有通用性的代码,客户端 API 的一些配置和其他 API 的定义。

用restful+ribbon实现服务消费者

首先搭建一个注册中心和两个服务提供者,这里就不在介绍
下边路径参考:https://blog.csdn.net/weixin_44100455/article/details/97645896

创建一个ribbon实现服务消费的项目:

cloud-ribbon项目

pom.xml文件中引入依赖:

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
		</dependency>

application.yml配置文件如下:

server:
  port: 4000
spring:
  application:
    name: cloud-ribbon
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

启动类内容如下:

在启动类中通过@EnableDiscoveryClient向服务中心注册;并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。

@SpringBootApplication
@EnableDiscoveryClient
public class CloudRibbonApplication {

	public static void main(String[] args) {
		SpringApplication.run(CloudRibbonApplication.class, args);
	}

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

先创建一个service层,通过之前注入ioc容器的restTemplate来消费CLOUD-SERVER服务的"/hi"接口,在这里我们直接用的程序名替代了具体的url地址,在ribbon中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名。
在这里插入图片描述
StuService类的内容如下:

@Service
public class StuService {

    @Autowired
    private RestTemplate restTemplate;

    public String hi(String name){
        return restTemplate.getForObject("http://CLOUD-SERVER/hi?name=" + name,String.class);
    }
}

然后再创建一个controller层,在StuController中用调用StuService 的方法
在这里插入图片描述
StuController类内容如下:

@RestController
public class StuController {

    @Autowired
    private StuService stuService;

    @RequestMapping("hi")
    public String hi(String name){
        return  stuService.hi(name);
    }
}

然后在浏览器多次访问:http://localhost:4000/hi?name=xiao ;浏览器会交替显示如下页面:
在这里插入图片描述
在这里插入图片描述
因为用ribbon进行了负载均衡,所以会轮流的调用2001与2002两个端口
到此,ribbon实现服务的消费也就完成了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值