10分钟入门Nacos+Feign服务间接口调用
文章目录
- nacos-order-center
- nacos-user-center
Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求。Spring Cloud引入 Feign并且集成了Ribbon实现客户端负载均衡调用。
下面通过一个简单的示例延时使用Nacos+Feign完成服务间的接口调用
【基本描述】用户调用用户服务,用户服务通过Feign调用订单服务
nacos-order-center
订单服务需要的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
bootstrap.yaml设置Nacos配置
spring:
application:
name: nacos-order-center
profiles:
active: dev
cloud:
nacos:
config:
# 配置文件的环境
group: ${spring.profiles.active}
# 配置文件的格式
file-extension: yaml
# 配置中心的地址
server-addr: 192.168.208.31:8848
# 配置文件prefix
prefix: ${spring.application.name}
discovery:
server-addr: 192.168.208.31:8848
group: ${spring.profiles.active}
启动类启动服务发现以及启用Feign服务
@SpringBootApplication
@RestController
@EnableFeignClients
public class OrderCenterApplication {
public static void main(String[] args) {
SpringApplication.run(OrderCenterApplication.class, args);
}
}
order服务作为被调用方,提供一个Restful接口,该接口既可以直接通过服务IP地址访问也可以通过Feign访问
@RestController
@RequestMapping("/order")
public class OrderController {
@GetMapping("/name")
public String user(String name){
return name+"=>查询用户订单";
}
}
启动项目,查看Nacos服务列表,此时已经注册了订单服务
nacos-user-center
用户服务添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
配置用户服务启动类
@SpringBootApplication
@RestController
@EnableFeignClients
public class UserCenterApplication {
public static void main(String[] args) {
SpringApplication.run(UserCenterApplication.class, args);
}
}
设置@FeignClient以支持HTTP访问其他服务接口
注意,GetMapping需要指明参数@RequestParam,因为FeignClient最后是用HttpURLConnectiion发起的网络连接,在发起的过程中,Connection会判断其自身的body是否为空,如果不为空,则将 GET Method 转换为 POST Method。
@FeignClient:指定服务名称,其他的注解都是兼容SpringMVC
@FeignClient("nacos-order-center")
@RequestMapping("/order")
public interface OrderFeignClient {
@GetMapping("/name")
String findOrderByUser(@RequestParam("name") String name);
}
提供一个对外的接口
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
OrderFeignClient orderFeignClient;
@GetMapping("/hello")
public String user(String name){
return orderFeignClient.findOrderByUser(name);
}
}
启动用户服务,此时已经注册用户服务
测试,调用用户服务提供的接口,可以看到已经在用户服务中通过Feign成功调用了订单服务
还没有评论,来说两句吧...