目录
RestTemplate
OpenFeign
1.引入依赖open-feign
2.声明要调用的服务和接口
3.注入FeignClient启用
4验证
RestTemplate
在微服务架构中,使用RestTemplate
是一种常见的方式进行服务间的HTTP通信。以下是一个简单的示例,演示如何使用RestTemplate
进行微服务之间的RESTful调用。
首先,确保你的项目中引入了Spring Boot和RestTemplate
的依赖。在pom.xml
中添加如下依赖:
<dependencies>
<!-- Spring Boot Starter Web包含了RestTemplate -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
接下来,创建一个使用RestTemplate
进行RESTful调用的服务类。以下是一个简单的示例,其中假设你有两个微服务,分别是ServiceA
和ServiceB
,它们之间通过RESTful调用:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class MicroserviceClient {
private final RestTemplate restTemplate;
@Autowired
public MicroserviceClient(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
public String callServiceA() {
String serviceAUrl = "http://service-a/api/data";
ResponseEntity<String> response = restTemplate.getForEntity(serviceAUrl, String.class);
return response.getBody();
}
public String callServiceB() {
String serviceBUrl = "http://service-b/api/data";
ResponseEntity<String> response = restTemplate.getForEntity(serviceBUrl, String.class);
return response.getBody();
}
}
最后,确保在你的Spring Boot应用程序主类(通常是带有@SpringBootApplication
注解的类)中创建一个RestTemplate
的Bean:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class AppConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
以上示例是一个简单的演示,实际中你可能需要更多的配置和异常处理。此外,现代的微服务架构中,通常会使用更先进的工具如Feign或者WebClient来简化和优化微服务之间的通信。
OpenFeign
OpenFeign是一个声明式的Web服务客户端,使得编写HTTP客户端变得更加简单。通过使用OpenFeign,你可以更轻松地声明和实现服务间的RESTful调用,而不必显式地创建RestTemplate
实例。
还是使用项目进行说明,mall-product想要调用mall-order的获取订单列表接口。
1.引入依赖open-feign
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.声明要调用的服务和接口
在mall-product中声明OrderFeignService的order接口
3.注入FeignClient启用
4验证
调用http://localhost:10010/product/brand/order,返回order列表信息
如果运行报错:
No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc?
pom中需要添加spring-cloud-loadbalancer依赖,排除冲突的spring-cloud-starter-netflix-ribbon
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>