SpringCloud远程服务调用
下面介绍在SpringCloud中如何使用openfeign实现远程服务调用
1.在字典服务中有这么2个接口
@Api(tags = "数据字典接口")
@RestController
@RequestMapping("/admin/cmn/dict/")
@CrossOrigin
public class DictController {@Autowiredprivate DictService dictService;//根据dictCode和value获取字典名称@GetMapping("/geDictName/{dictCode}/{value}")public String getDictName(@PathVariable String dictCode,@PathVariable String value){return dictService.getDictName(dictCode,value);}//根据value获取字典名称@GetMapping("/geDictName/{value}")public String getDictName(@PathVariable String value){return dictService.getDictName("",value);}
}
2.其他微服务需要调用字典服务上面2个接口以实现将字典值转变为可识别的中文名称。下面说下实现的步骤:
2.1)在需要远程调用的微服务pom文件中引入依赖:
<!-- 服务调用feign --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- 服务注册 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
2.2)写一个interface,远程调用字典服务的2个接口
@FeignClient("service-cmn")
@Repository
public interface DictFeignClient {@GetMapping("/admin/cmn/dict/geDictName/{dictCode}/{value}")public String getDictName(@PathVariable("dictCode") String dictCode,@PathVariable("value") String value);@GetMapping("/admin/cmn/dict/geDictName/{value}")public String getDictName(@PathVariable("value") String value);
}
这里需要注意,注解@PathVariable后面需要指明变量名,如@PathVaribale("value")否则会导致找不到(原接口中可不用写)。先用注解@FeignClient("service-cmn")指定要远程调用的微服务名,其次使用@Repository注解防止引用时红线警告,不写不影响正常使用。
2.3)在启动类上加上注解@EnableFeignClients(basePackages = "com.www"),开启远程调用,并指明扫描的包类
@SpringBootApplication
@MapperScan(basePackages = "com.www.hosp.mapper")
@ComponentScan(basePackages = "com.www")
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.www")
public class ServiceHospApplication {public static void main(String[] args) {SpringApplication.run(ServiceHospApplication.class,args);}
}
保障能实现远程调用的前提条件:这2个服务在注册中心完成注册,并且服务能正常访问。
如此并可实现远程调用其他微服务。