SpringCloud远程服务调用

下面介绍在SpringCloud中如何使用openfeign实现远程服务调用

1.在字典服务中有这么2个接口

@Api(tags = "数据字典接口")
@RestController
@RequestMapping("/admin/cmn/dict/")
@CrossOrigin
public class DictController {
    @Autowired
    private 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文件中引入依赖:

        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        

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个服务在注册中心完成注册,并且服务能正常访问。

如此并可实现远程调用其他微服务。

你可能感兴趣的:(spring,cloud,java,spring)