微服务通信

一、Feign远程调用

Feign是Spring Cloud提供的⼀个声明式的伪Http客户端, 它使得调⽤远程服务就像调⽤本地服务⼀样简单, 只需要创建⼀个接⼝并添加⼀个注解即可。 Nacos很好的兼容了Feign, Feign 默认集了Ribbon, 所以在Nacos下使⽤Fegin默认就实现了负载均衡的效果

官⽅地址: https://github.com/OpenFeign/feign

1.1基本使⽤

1加⼊Fegin的依赖

复制代码
<!--fegin组件-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2在主类上添加Fegin的注解

@EnableFeignClients// 开启 Fegin

3创建⼀个service, 并使⽤Fegin实现微服务调⽤

4 修改controller代码,并启动验证

5 重启order微服务,查看效果

1.2 ⾃定义配置

Feign可以⽀持很多的⾃定义配置,如下表所示:

⼀般情况下,默认值就能满⾜我们使⽤,如果要⾃定义时,只需要创建⾃定义的@Bean覆盖默认Bean 即可。

配置⽂件⽅式

基于配置⽂件修改feign的⽇志级别可以针对单个服务:

复制代码
feign:
  client:
    config:
     service-product: # 针对某个微服务的配置
       loggerLevel: FULL #日志级别

也可以针对所有服务:

复制代码
feign:
  client:
    config:
      default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
       loggerLevel: FULL #日志级别

注意:需要把⽇志级别设置

复制代码
logging:
  level:
    com.wei: debug

⽽⽇志的级别分为四种:

  • NONE:不记录任何⽇志信息,这是默认值。
  • BASIC:仅记录请求的⽅法, URL以及响应状态码和执⾏时间
  • HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
  • FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。

1.3 Feign使⽤优化

Feign底层发起http请求,依赖于其它的框架。其底层客户端实现包括:

  • URLConnection:默认实现,不⽀持连接池
  • Apache HttpClient :⽀持连接池
  • OKHttp:⽀持连接池

因此提⾼Feign的性能主要⼿段就是使⽤连接池代替默认的URLConnection

这⾥我们⽤Apache的HttpClient来演示

1 引入依赖

复制代码
<!--httpClient的依赖 -->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

2 配置连接池

复制代码
feign:
  client:
    config:
      default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
       loggerLevel: FULL #日志级别
  httpclient:
    enabled: true # 开启feign对HttpClient的支持
    max-connections: 200 #最大连接数
    max-connections-per-route: 50 #每个路径的最大连接数

总结:

1.⽇志级别尽量⽤basic

2.使⽤HttpClient或OKHttp代替URLConnection

  • 引⼊feign-httpClient依赖
  • 配置⽂件开启httpClient功能,设置连接池参数

二、Dubbo远程调用

2.1 基本简介

Dubbo是阿⾥巴巴开源的基于 Java 的⾼性能 RPC分布式服务框架,致⼒于提供⾼性能和透明化 的RPC远程服务调⽤⽅案,以及SOA服务治理⽅案。 Spring Cloud Alibaba微服务开发框架集成 了Dubbo,可实现微服务对外暴露Dubbo协议的接⼝,Dubbo协议相⽐RESTful协议速度更快 RPC:RPC是远程过程(Remote Procedure Call)的缩写形式,调⽤RPC远程⽅法就像调⽤本地 ⽅法⼀样,Dubbo之前阿⾥研发,中间停⽌维护2年,最后开启维护并捐献给Apache

dubbo官⽹: http://dubbo.io/

2.2 基础实现

A.提供统⼀业务api

B.编辑服务提供者

添加依赖

复制代码
<!--dubbo-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>

添加dubbo配置

复制代码
dubbo:
  scan:
    base-packages: com.wei.service.impl
  protocols:
    dubbo:
      name: dubbo
      port: -1
  registry:
    address: spring-cloud://localhost

编写并暴露服务

C.编辑服务消费者

添加依赖

复制代码
<!--dubbo-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>

添加dubbo配置

复制代码
dubbo:
  registry:
    address: spring-cloud://localhost
  cloud:
    subscribed-services: service-product

引⽤服务

服务调⽤测试

相关推荐
唐僧洗头爱飘柔95271 天前
【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
java·spring·spring cloud·微服务·架构·resttemplate·java微服务技术栈
Light601 天前
领码方案|微服务与SOA的世纪对话(3):方法论新生——DDD、服务网格与AI Ops的融合之道
运维·人工智能·微服务·ddd·soa·服务网格·ai ops
可触的未来,发芽的智生1 天前
触摸未来2025.10.05:悟神经网络符号之伤,拥抱声音的宇宙
人工智能·python·神经网络·算法·架构
yunmi_1 天前
微服务,Spring Cloud 和 Eureka:服务发现工具
java·spring boot·spring cloud·微服务·eureka·架构·服务发现
一叶飘零_sweeeet1 天前
从 0 到 PB 级存储:MinIO 分布式文件系统实战指南与架构解密
java·架构·大文件存储
u0104058361 天前
电商返利APP的秒杀活动架构:如何通过本地缓存(Caffeine)+ 分布式锁应对瞬时高并发?
分布式·缓存·架构
飞川撸码1 天前
读扩散、写扩散(推拉模式)详解 及 混合模式(实际场景分析及相关问题)
分布式·后端·架构
艾醒(AiXing-w)1 天前
大模型面试题剖析:深入解析 Transformer 与 MoE 架构
深度学习·架构·transformer
hzulwy1 天前
微服务注册与监听
微服务·云原生·架构·go
唐僧洗头爱飘柔95272 天前
【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
spring cloud·微服务·zookeeper·eureka·服务发现·集群部署·服务注册