Java之 Spring Cloud 微服务搭建Ribbon(第一个阶段)【三】【SpringBoot项目实现商品服务器端是调用】

本文详细介绍了SpringCloud中如何使用Eureka和Ribbon实现服务发现与客户端负载均衡,包括Ribbon在服务调用中的角色、负载均衡策略的配置和实际应用示例。
摘要由CSDN通过智能技术生成

在 SpringCloud 中,Eureka一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从Eureka中读取到的服务信息,在调用服务节点提供的服务时,会合理的进行负载。

在SpringCloud中可以将注册中心和Ribbon配合使用,Ribbon自动的从注册中心中获取服务提供者的列表信息,并基于内置的负载均衡算法,请求服务

(2) Ribbon的主要作用

(1)服务调用

基于Ribbon实现服务调用, 是通过拉取到的所有服务列表组成(服务名-请求路径的)映射关系。借助RestTemplate 最终进行调用

(2)负载均衡

当有多个服务提供者时,Ribbon可以根据负载均衡的算法自动的选择需要调用的服务地址

2、基于Ribbon实现订单调用商品服务


不论是基于Eureka的注册中心还是基于Consul的注册中心,SpringCloudRibbon统一进行了封装,所以对于服务调用,两者的方式是一样的。

(1)坐标依赖

在springcloud提供的服务发现的jar中以及包含了Ribbon的依赖。

所以这里不需要导入任何额外的坐标

(2)工程改造

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

使用restTemplate调用远程微服务:不需要拼接微服务的URL路径,以待请求的服务名替换IP地址

1)修改order_service当中的OrderApplication启动类

在这里插入图片描述

package cn.itbluebox.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.itbluebox.order.entity”)

public class OrderApplication {

/*

使用Spring提供的 RestTemplate 发送http请求到商品服务

1、创建RestTemplate对象交给容器管理

2、在使用的时候,调用其方法完成操作(getXX,postXX)

@LoadBalanced : 是Ribbon提供的负载均衡的注解

*/

@LoadBalanced

@Bean

public RestTemplate restTemplate(){

return new RestTemplate();

}

public static void main(String[] args) {

SpringApplication.run(OrderApplication.class,args);

}

}

2)修改OrderController

实现基于Ribbon的形式调用远程的微服务

1、使用@LoadBalanced声明RestTemplate

2、使用服务名称替换IP地址

在这里插入图片描述

package cn.itbluebox.order.controller;

import cn.itbluebox.order.entity.Product;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.cloud.client.ServiceInstance;

import org.springframework.cloud.client.discovery.DiscoveryClient;

import org.springframework.web.bind.annotation.*;

import org.springframework.web.client.RestTemplate;

import java.util.List;

@RestController

@RequestMapping(“/order”)

public class OrderController {

//注入RestTemplate对象

@Autowired

private RestTemplate restTemplate;

/*

注入DiscoveryClient:

SpringCloud 提供的获取原数组的工具类

调用方法获取服务的元数据信息

*/

@Autowired

private DiscoveryClient discoveryClient;

/*

参数:商品ID

通过订单系统,调用商品服务

1、需要配置商品对象

2、需要调用商品服务

3、entity.Product

使用java 当中的urlconnection,httpclient,okhttp

*/

/*

实现基于Ribbon的形式调用远程的微服务

1、使用@LoadBalanced声明RestTemplate

2、使用服务名称替换IP地址

*/

@RequestMapping(value = “/buy/{id}”, method = RequestMeth

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值