Spring Cloud 提供 RestTemplate 和 FeignClient 方式完成服务间调用,好的微服务架构-服务调用 应该遵循 对外REST,对内RPC这个原则,为什么选择用RPC,在下面列出了RPC和REST不同之处
RPC | REST | |
---|---|---|
耦合性 | 强耦合 | 松散耦合 |
信息协议 | 二进制 | 文本XML,JSON |
通讯协议 | TCP(传输层) | HTTP/HTTP2(应用层) |
性能 | 高 | 低于RPC |
解决方案 | Dubbo,Tars | Spring MVC |
开发者友好 | 二进制不可读 | 文本信息可读 |
下面开始我们应用开发Spring Cloud + Nacos + Apache Dubbo,项目结构如下
项目 | 介绍 |
---|---|
dubbo-consumer-echo | echo消费者 |
dubbo-provider-echo | echo服务 |
dubbo-api-echo | 接口定义 |
dubbo-api-echo
pom.xml
<dependencies>
<!--spring boot dubbo-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!-- Dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.3</version>
</dependency>
<!-- dubbo-serialization-kryo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-serialization-kryo</artifactId>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>