1.首先在pom文件中引入相关依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
</dependency>
2.然后在启动类上加上@EnableFeignClients注解,该注解用来启用feign客户端
@EnableCaching
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
@MapperScan(value = "cn.***.***.***.mapper")
public class A****Application {
public static void main(String[] args) {
SpringApplication.run(A****Application.class,args);
}
}
@EnableCaching注解用来开启缓存 具体使用在之前文章有体现。
@EnableDiscoveryClient和@EnableEurekaClient注解都是能够让注册中心能够发现,扫描到该服务。@
EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient可以是其他注册中心。
@MapperScan注解用来扫描mapper对应的包名路径
3.远程调用接口
在对应包名新建一个接口用来调用其他微服务的方法
@RestController
@FeignClient(name = "user", path = "/user")
public interface SysUserservice {
@PostMapping("add")
boolean add(SysUser sysUesr)
@PostMapping("update")
boolean update(SysUser sysUesr)
}
@FeignClient注解里面的属性
value和name的作用一样,如果没有配置url那么配置的值将作为服务名称,用于服务发现。反之只是一个名称。如果需要调用多个的话这俩个值是唯一性的,重复的话启动会报错,解决方法加contextId 用来区分
The bean 'user.FeignClientSpecification' could not be registered. A bean with that name has already been defined and overriding is disabled.
contextId 我们不想将所有的调用接口都定义在一个类中,有一种解决方案就是为每个Client手动指定不同的contextId,这样就不会冲突了。
path
path定义当前FeignClient访问接口时的统一前缀,比如接口地址是/user/add, 如果你定义了前缀是user, 那么具体方法上的路径就只需要写/add即可。
url
url用于配置指定服务的地址,相当于直接请求这个服务,不经过Ribbon的服务选择。像调试等场景可以使用。
(注:路径对应的是调用另一个服务中controller层的路径)
以上就可以实现微服务远程调用。