目录
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;@Autowiredpublic 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 {@Beanpublic 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>