tulip notes
首页
  • 学习笔记

    • 《Vue》
  • 踩坑日记

    • JavaScript
  • MQ
  • Nginx
  • IdentityServer
  • Redis
  • Linux
  • Java
  • SpringBoot
  • SpringCloud
  • MySql
  • docker
  • 算法与设计模式
  • 踩坑与提升
  • Git
  • GitHub技巧
  • Mac
  • 网络
  • 项目构建合集
  • 一些技巧
  • 面试
  • 一些杂货
  • 友情链接
  • 项目发布
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Star-Lord

希望一天成为大师的学徒
首页
  • 学习笔记

    • 《Vue》
  • 踩坑日记

    • JavaScript
  • MQ
  • Nginx
  • IdentityServer
  • Redis
  • Linux
  • Java
  • SpringBoot
  • SpringCloud
  • MySql
  • docker
  • 算法与设计模式
  • 踩坑与提升
  • Git
  • GitHub技巧
  • Mac
  • 网络
  • 项目构建合集
  • 一些技巧
  • 面试
  • 一些杂货
  • 友情链接
  • 项目发布
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • SCAlibaba-Nacos

    • 使用Nacos实现服务注册与发现
    • 几种不同的服务消费方式
      • RestTemplate
      • Feign
      • WebClient
      • 总结
    • 使用Nacos实现配置管理
    • nacos实现数据持久化
    • Nacos配置管理-补充
  • SCAlibaba-Sentinel

  • 负载均衡与服务调用

  • 服务熔断与降级

  • 服务链路追踪与网关

  • 分布式实战与细节

  • 其他

  • 《SpringCloud》笔记
  • SCAlibaba-Nacos
EffectTang
2023-10-10
目录

几种不同的服务消费方式

# 几种不同的服务消费方式

上文中我们使用RestTemplate进行了服务的调用,还有其他的方式进行

Nacos Discovery 适配了 Netflix Ribbon,可以使用 RestTemplate 或 OpenFeign 进行服务的调用,或者WebClient(Spring 5中引入的)

# RestTemplate

@Configuration
public class AppConfig {

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
1
2
3
4
5
6
7
8
9

controller

@GetMapping(value = "/test/{str}")
public String echo(@PathVariable String str) {
  System.out.println("path-str is:"+str);
  return restTemplate.getForObject("http://127.0.0.1:8809/hello/" + str, String.class);
}
1
2
3
4
5

上述代码getForObject(),第一个参数是 url ,第二个参数是接口返回的数据类型。

# Feign

关于Feign以及OpenFeign在服务调用那部分,有更详细的讲解,欢迎移步查看。

  • 在之前的基础上,引入对应pom坐标
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
1
2
3
4
  • 配置feign实例 并通过注解@FeignClient来指定这个接口所要调用的服务名称
@FeignClient("service-provider")
public interface FeignConfig {

    @GetMapping("/hello/{echo}")
    String echoHello(@PathVariable("echo")String echo);
  	// 服务提供者--提供的接口
    
}
1
2
3
4
5
6
7
8

上述的接口,service-provider,就是你注册到服务中心的微服务名称,下方的接口echoHello(),就是服务注册中心-微服务service-provider中对应的接口,请注意接口对应的返回值也要一致。

  • 在启动类开启通过@EnableFeignClients注解开启扫描Spring Cloud Feign客户端的功能
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class NacosClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosClientApplication.class, args);
    }
}
1
2
3
4
5
6
7
8
  • 进行服务调用 controller
@RestController
public class TestController {
    @Autowired
    FeignConfig feignConfig;
  
  	@GetMapping("/vc")
    public String test() {
        String result = feignConfig.echoHello("didi");
        return "Return : " + result;
    }

}
1
2
3
4
5
6
7
8
9
10
11
12

# WebClient

因为是使用的webflux下的webClient,因此需要引入新的pom坐标

  • 引入webflux
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
1
2
3
4
  • 配置webClient
@Bean
@LoadBalanced
public WebClient.Builder loadBalancedWebClientBuilder() {
  return WebClient.builder();
}
1
2
3
4
5
  • controller——进行服务消费
@GetMapping(value = "/day")
public Mono<String> demo(){
  System.out.println("使用WebClient 进行服务消费");
  Mono<String> stringMono = webClientBuilder.build()
    .get()
    .uri("http://service-provider/hello/dev")
    .retrieve()
    .bodyToMono(String.class);
  return stringMono;
}
1
2
3
4
5
6
7
8
9
10

# 总结

其中最常用的是RestTemplate跟Feign,它们各自的区别如下:

Feign:Feign是一个声明式的Web Service客户端(Feign是由Netflix公司开发的一个声明式的HTTP客户端),用于简化服务之间的通信。它使得写HTTP客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解支持,包括Feign注解和JAX-RS注解。

它有如下优点:

  • 使用简单,进行服务消费可以像调用本地方法一般
  • 支持自动处理异常:Feign可以自动处理异常,减少编写代码的工作量
  • 支持负载均衡:Feign可以自动进行负载均衡,提高服务的可用性和性能

使用Spring Cloud Alibaba进行Feign调用时,需要引入以下POM文件依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>版本号</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>版本号</version>
</dependency>
1
2
3
4
5
6
7
8
9
10

RestTemplate:RestTemplate是Spring MVC中的一部分,用于发送HTTP请求。在Spring Cloud中,RestTemplate也可以用于微服务之间的通信。RestTemplate的缺点是需要手动处理异常,这可能会导致代码变得复杂。虽然RestTemplate的编程方式比Feign更低级一些,但是它具有更强的定制性。

更强的定制型体现为:RestTemplate提供了更多的API来设置请求和响应的细节,可以进行更细粒度的定制

  • 提供了setRequestHeader()方法来设置请求头
  • 提供了setEntity()方法来设置请求体
  • 提供了getResponseBody()方法来获取响应体等
上次更新: 2025/04/23, 16:23:16
使用Nacos实现服务注册与发现
使用Nacos实现配置管理

← 使用Nacos实现服务注册与发现 使用Nacos实现配置管理→

最近更新
01
面向切面跟自定义注解的结合
05-22
02
时间跟其他数据的序列化
05-19
03
数据加密与安全
05-17
更多文章>
Theme by Vdoing | Copyright © 2023-2025 EffectTang
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式