首页 > 其他分享 >spingcloud之基于ribbon的远程调用&负载均衡

spingcloud之基于ribbon的远程调用&负载均衡

时间:2022-11-30 18:33:30浏览次数:37  
标签:负载 spingcloud RestTemplate product springframework org import annotation ribbon


1-服务调用

eureka内部继承了ribbon

  • 在创建RestTemplate的时候,声明@LoadBalanced

在服务消费者order_service中,找到启动类OrderApplication

package cn.itcast.order;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EntityScan("cn.itcast.order.entity") //用来扫描和发现指定包及其子包中的Entity定义
public class OrderApplication {

/**
* 使用spring提供的RestTemplate发送http请求到商品服务
* 1-创建RestTemplate对象交给容器管理
* 2-在使用的时候,调用其方法完成操作(getXX,postXXX)
*/
@LoadBalanced //是ribbon提供的负载均衡的注解
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}

public static void main(String[] args) {
SpringApplication.run(OrderApplication.class,args);
}
}
  • 使用RestTemplate调用远程服务

       不需要拼接微服务的URL,以待请求的服务名替换ip地址

package cn.itcast.order.controller;

import cn.itcast.order.entity.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;


@RestController
@RequestMapping("/order")
public class OrderController {

//注入restTemplate
@Autowired
private RestTemplate restTemplate;

@Autowired
//import org.springframework.cloud.client.discovery.DiscoveryClient;
/**
* 注入DiscoveryClient:springcloud提供的获取元数据的工具类,调用方法获取服务的元数据信息
*/
private DiscoveryClient discoveryClient;

/**
*
* @param id 商品id
* @return
* 通过订单系统,调用商品服务根据id查询商品信息
* 1-需要配置商品服务
* 2-需要调用商品服务
*/
@RequestMapping(value = "/buy/{id}",method = RequestMethod.GET)
public Product findById(@PathVariable Long id){
Product product = null;
//根据元数据的主机地址和端口号拼接请求微服务的URL
product = restTemplate.getForObject("http://service-product/product/1",Product.class);
return product;
}
}

启动类: 

spingcloud之基于ribbon的远程调用&负载均衡_微服务

spingcloud之基于ribbon的远程调用&负载均衡_微服务_02

2-负载均衡

服务端负载均衡:nginx F5

客户端负载均衡:ribbon

Ribbon是一个典型的客户端负载均衡器,Ribbon会获取服务的所有地址,根据内部的负载均衡算法,获取本次请求的有效地址.

spingcloud之基于ribbon的远程调用&负载均衡_微服务_03

  • 准备两个商品微服务(9001,9011)

修改ProductController

package cn.itcast.product.controller;

import cn.itcast.product.entity.Product;
import cn.itcast.product.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/product")
public class ProductController {

@Autowired
private ProductService productService;

@Value("${server.port}")
private String port;

@Value("${spring.cloud.client.ip-address}")
private String ip;

@RequestMapping(value = "/{id}",method = RequestMethod.GET)
public Product findById(@PathVariable Long id){
Product product = productService.findById(id);
product.setProductName("访问的服务地址:"+ip+":"+port);
return product;
}

@RequestMapping(value = "",method = RequestMethod.POST)
public String save(@RequestBody Product product){
productService.save(product);
return "保存成功";
}
}

spingcloud之基于ribbon的远程调用&负载均衡_负载均衡_04

 

spingcloud之基于ribbon的远程调用&负载均衡_微服务_05

  • 在订单系统中远程以负载均衡的形式调用商品服务

由于使用了@LoadBalanced

spingcloud之基于ribbon的远程调用&负载均衡_负载均衡_06

f5 

spingcloud之基于ribbon的远程调用&负载均衡_spring_07

轮询的负载均衡

标签:负载,spingcloud,RestTemplate,product,springframework,org,import,annotation,ribbon
From: https://blog.51cto.com/u_12528551/5900122

相关文章

  • springcloud之负载均衡策略
    Ribbon内置了多种负载均衡策略,内部负责负载均衡的顶级接口为com.netflix.loadbalanced.IRule  服务消费者,application.yml中添加#修改ribbon的负载均衡策略服务名-......
  • Nginx+keepalive 负载均衡
    1 规划和准备两台相同配置的web用途IPMASTER192.168.1.100BACKUP192.1681.1012 安装两台接入服务器分别安装NginX和keepalived:准备依赖包:yum-yinstallgccpcre-devel......
  • Linux- Nginx简单的负载均衡(一)
    这里先进行简单的nginx负载,安装nginx这里就不多说了,我们情景假设在已经安装好了nginx上:1)查询nginx中的upstrea负载均衡模块 默认是有安装的。进入nginx源码目录中./config......
  • Haproxy负载均衡集群
     1.Haproxy的相关知识1.1常用的负载均衡调度器1.2Haproxy应用相比较其他的优缺点1.3Haproxy的特性1.4Haproxy调度算法1.5LVS、Nginx、HAproxy的区别2.Hapr......
  • LVS负载均衡集群--DR模式
    一、LVS-DR工作原理LVS-DR(LinuxVirtualServerDirectorServer)工作模式,是生产环境中最常用的一种工作模式。LVS-DR模式,DirectorServer作为群集的访问入口,不作为......
  • lvs、haproxy、nginx 负载均衡的比较分析
    对软件实现​​负载均衡​​的几个软件,小D详细看了一下,从性能和稳定上还是LVS最牛,基本达到了F5硬件设备的60%性能,其他几个10%都有点困难。     不过就因为LVS忒牛了,配......
  • LVS负载均衡集群
    LVS-DR集群介绍LVS-DR(LinuxVirtualServerDirectorServer)工作模式,是生产环境中最常用的一种工作模式。1、LVS-DR工作原理LVS-DR模式,DirectorServer作为群集的访......
  • 【Spring Cloud实战】Ribbon负载均衡
    gitee地址:https://gitee.com/javaxiaobear/spring-cloud_study.git在线阅读地址:https://javaxiaobear.gitee.io/1、概述SpringCloudRibbon是基于NetflixRibbon实现的一......
  • 高可用性、负载均衡的mysql集群解决方案
    一、mysql的市场占有率二、mysql为什么受到如此的欢迎三、mysql数据库系统的优缺点四、网络服务器的需求五、什么是mysql的集群六、什么是负载均衡七、mysql集群部署和实现......
  • LVS负载均衡集群——DR模式
    一、LVS-DR集群介绍LVS-DR(LinuxVirtualServerDirectorServer)工作模式,是生产环境中最常用的一种工作模式。1.1LVS-DR工作原理LVS-DR模式,DirectorServer作为群集......