前面使用Ribbon方式实现负载均衡版的远程调用,实现没问题,但是每次都需要手动拼接URL,有点小麻烦,有没有更加优雅的方式呢?
答案是yes:使用Feign
1 什么是Feign
Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。
Nacos很好的兼容了Feign, Feign默认集成了 Ribbon, 所以在Nacos下使用Fegin默认就实现了负载均衡的效果。
2 订单微服务集成Feign
2.1 在shop-order-server项目的pom文件加入Fegin的依赖 (注意在服务调用方加)
<!--fegin组件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.2 在启动类OrderServer.java上添加Fegin的扫描注解,注意扫描路径(默认扫描当前包及其子包)
package com.example.server;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@MapperScan("com.example.server.mapper")
@EnableDiscoveryClient
@EnableFeignClients
public class ShopOrderServerApplication {
public static void main(String[] args) {
SpringApplication.run(ShopOrderServe