0
点赞
收藏
分享

微信扫一扫

【微服务~原始真解】Spring Cloud —— Ribbon 实现服务调用

【微服务~原始真解】Spring Cloud —— Ribbon 实现服务调用_spring cloud

????这里是【秒懂·云原生】,关注我学习云原生不迷路

【秒懂·云原生】 目前主要更新微服务,一起学习一起进步。

????本期介绍

主要介绍Spring Cloud —— Ribbon 实现服务调用


文章目录

  • ​​????专栏介绍​​
  • ​​????本期介绍​​
  • ​​Ribbon 实现服务调用​​
  • ​​一、 在主工程 spring-cloud-demo 下,创建一个名为 micro-service-cloud-consumer-dept-80 的微服务,并在其 pom.xml 中引入所需的依赖,代码如下。​​
  • ​​二、 在类路径(即 /resource 目录)下,新建一个配置文件 application.yml,配置内容如下。​​
  • ​​三、在 net.biancheng.c.config 包下,创建一个名为 ConfigBean 的配置类,将 RestTemplate 注入到容器中,代码如下。​​
  • ​​四、在 net.biancheng.c.controller 包下,创建一个名为 DeptController_Consumer 的 Controller,该 Controller 中定义的请求用于调用服务端提供的服务,代码如下。​​
  • ​​五、在 micro-service-cloud-consumer-dept-80 的主启动类上,使用 @EnableEurekaClient 注解来开启 Eureka 客户端功能,代码如下。​​
  • ​​六、依次启动服务注册中心 micro-service-cloud-eureka-7001、服务提供者 micro-service-cloud-provider-dept-8001 以及服务消费者 micro-service-cloud-consumer-dept-80。​​
  • ​​七、使用浏览器访问结果如下图。​​


Ribbon 实现服务调用

Ribbon 可以与 RestTemplate(Rest 模板)配合使用,以实现微服务之间的调用。

RestTemplate 是 Spring 家族中的一个用于消费第三方 REST 服务的请求框架。RestTemplate 实现了对 HTTP 请求的封装,提供了一套模板化的服务调用方法。通过它,Spring 应用可以很方便地对各种类型的 HTTP 请求进行访问。

RestTemplate 针对各种类型的 HTTP 请求都提供了相应的方法进行处理,例如 HEAD、GET、POST、PUT、DELETE 等类型的 HTTP 请求,分别对应 RestTemplate 中的 headForHeaders()、getForObject()、postForObject()、put() 以及 delete() 方法。

下面我们通过一个简单的实例,来演示 Ribbon 是如何实现服务调用的。

一、 在主工程 spring-cloud-demo 下,创建一个名为 micro-service-cloud-consumer-dept-80 的微服务,并在其 pom.xml 中引入所需的依赖,代码如下。

 version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>

<parent>
<artifactId>spring-cloud-demoartifactId>
<groupId>net.biancheng.cgroupId>
<version>0.0.1-SNAPSHOTversion>
parent>
<groupId>net.biancheng.cgroupId>
<artifactId>micro-service-cloud-consumer-dept-80artifactId>
<version>0.0.1-SNAPSHOTversion>
<name>micro-service-cloud-consumer-dept-80name>
<description>Demo project for Spring Bootdescription>
<properties>
<java.version>1.8java.version>
properties>
<dependencies>

<dependency>
<groupId>net.biancheng.cgroupId>
<artifactId>micro-service-cloud-apiartifactId>
<version>${project.version}version>
dependency>

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>

<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>

<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>

<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-ribbonartifactId>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
exclude>
excludes>
configuration>
plugin>
plugins>
build>
project>

二、 在类路径(即 /resource 目录)下,新建一个配置文件 application.yml,配置内容如下。

server:
port: 80 #端口号
############################################# Spring Cloud Ribbon 负载均衡配置##########################
eureka:
client:
register-with-eureka: false #本微服务为服务消费者,不需要将自己注册到服务注册中心
fetch-registry: true #本微服务为服务消费者,需要到服务注册中心搜索服务
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #服务注册中心集群

三、在 net.biancheng.c.config 包下,创建一个名为 ConfigBean 的配置类,将 RestTemplate 注入到容器中,代码如下。

package net.biancheng.c.config;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RetryRule;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
// 配置类注解
@Configuration
public class ConfigBean {

@Bean //将 RestTemplate 注入到容器中
@LoadBalanced //在客户端使用 RestTemplate 请求服务端时,开启负载均衡(Ribbon)
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}

四、在 net.biancheng.c.controller 包下,创建一个名为 DeptController_Consumer 的 Controller,该 Controller 中定义的请求用于调用服务端提供的服务,代码如下。

package net.biancheng.c.controller;
import net.biancheng.c.entity.Dept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@RestController
public class DeptController_Consumer {
//private static final String REST_URL_PROVIDER_PREFIX = "http://localhost:8001/"; 这种方式是直调用服务方的方法,根本没有用到 Spring Cloud
//面向微服务编程,即通过微服务的名称来获取调用地址
private static final String REST_URL_PROVIDER_PREFIX = "http://MICROSERVICECLOUDPROVIDERDEPT"; // 使用注册到 Spring Cloud Eureka 服务注册中心中的服务,即 application.name
@Autowired
private RestTemplate restTemplate; //RestTemplate 是一种简单便捷的访问 restful 服务模板类,是 Spring 提供的用于访问 Rest 服务的客户端模板工具集,提供了多种便捷访问远程 HTTP 服务的方法
//获取指定部门信息
@RequestMapping(value = "/consumer/dept/get/{id}")
public Dept get(@PathVariable("id") Integer id) {
return restTemplate.getForObject(REST_URL_PROVIDER_PREFIX + "/dept/get/" + id, Dept.class);
}
//获取部门列表
@RequestMapping(value = "/consumer/dept/list")
public List<Dept> list() {
return restTemplate.getForObject(REST_URL_PROVIDER_PREFIX + "/dept/list", List.class);
}
}

五、在 micro-service-cloud-consumer-dept-80 的主启动类上,使用 @EnableEurekaClient 注解来开启 Eureka 客户端功能,代码如下。

package net.biancheng.c;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class MicroServiceCloudConsumerDept80Application {
public static void main(String[] args) {
SpringApplication.run(MicroServiceCloudConsumerDept80Application.class, args);
}
}

六、依次启动服务注册中心 micro-service-cloud-eureka-7001、服务提供者 micro-service-cloud-provider-dept-8001 以及服务消费者 micro-service-cloud-consumer-dept-80。

七、使用浏览器访问结果如下图。

【微服务~原始真解】Spring Cloud —— Ribbon 实现服务调用_spring cloud_02

举报

相关推荐

0 条评论