好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

使用FeignClient进行微服务交互方式(微服务接口互相调用)

使用FeignClient进行微服务交互

先写一个公共方法

?

1

2

3

4

   public String getSettingValue(String name) {

        Map<String, Object> map = (Map) settingClient.getByName(name).getData();

        return (String) map.get( "value" );

   }

然后写一个Feign调用

?

1

2

3

4

5

@FeignClient (value= "qiang-admin" )

public interface SettingClient {

     @RequestMapping (value= "/setting/getSetting/{name}" ,method = RequestMethod.GET)

     public ReturnMsg getByName( @PathVariable ( "name" ) String name);

}

@FeignClient注解用于指定从哪个服务中调用功能 ,注意 里面的名称与被调用的服务

名保持一致,并且不能包含下划线。

@RequestMapping注解用于对被调用的微服务进行地址映射。注意 @PathVariable注

解一定要指定参数名称,否则出错。

@PathVariable:接口参数

被Feign调用的方法如下

?

1

2

3

4

5

6

7

8

9

10

     @RequestMapping (value= "/getSetting/{name}" ,method = RequestMethod.GET)

     public ReturnMsg getByName( @PathVariable String name){

         Setting condition = new Setting();

         condition.setName(name);

         ReturnMsg returnMsg = new ReturnMsg<>();

         Setting setting = settingService.findByCondition(condition);

         returnMsg.setCode(ReturnIntCode.SUCCESSS_CODE);

         returnMsg.setData(setting);

         return returnMsg;

     }

@FeignClient调用微服务注意事项

在初次使用springcloud,调用微服务的时候,常常会踩坑,这里总结一下,在调用微服务的时候,常犯的几点错误及注意点:

FeignClient接口不能使用@GettingMapping之类的组合注解

?

1

2

3

4

5

6

@FeignClient ( "target-servername" )

   public interface FeignClient {

        @RequestMapping (value = "/simple/{id}" , method =RequestMethod.GET)

  public Object findById( @PathVariable ( "id" ) Long id);

  ...

}

这边的@RequestMapping(value = "/simple/{id}", method = RequestMethod.GET) 不能写成@GetMapping("/simple/{id}") 。因为GetMapper是一个组合注解。

FeignClient接口中如果使用到@PathVariable

必须指定其value

?

1

2

3

4

5

6

@FeignClient ( "target-servername" )

public interface FeignClient {

  @RequestMapping (value = "/simple/{id}" , method = RequestMethod.GET)

  public Object findById( @PathVariable ( "id" ) Long id);

  ...

}

这边的@PathVariable("id") 中的]id],不能省略,必须指定。

FeignClient多参数的构造

如果想要请求target-servername 服务,并且参数有多个例如:http://target-servername/query-by?id=1&username=张三 要怎么办呢? 不能构造一个复杂的对象去接收,必须一个一个接收参数

?

1

2

3

4

5

@FeignClient ( "target-servername" )

public interface UserFeignClient {

  @RequestMapping (value = "/query-by" , method = RequestMethod.GET)

  public Object queryBy( @RequestParam ( "id" )Long id, @RequestParam ( "username" )String username);

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/qq_38188762/article/details/103163516

查看更多关于使用FeignClient进行微服务交互方式(微服务接口互相调用)的详细内容...

  阅读:23次