Fegin

Fegin

案例
//服务提供者:===================================
//controller:
@RestController
@RequestMapping("/provider")
public class ProviderController {
    @Autowired
    private UserService userService;
 
    @RequestMapping("/getUserById/{id}")
    public User getUserById(@PathVariable Integer id){
        return userService.getUserById(id);
    }
    }
}
//service & serviceImpl:
@Service
public class UserServiceImpl implements UserService {
    @Override
    public User getUserById(Integer id) {
        return new User(id,"张三",18);
    }
}


//服务消费者:===================================
//Controller:
@RestController
@RequestMapping(value = "/consumer")
public class ConsumerController {
 
    @Autowired
    private UserFeign userFeign;
 
    @RequestMapping(value = "/getUserById/{id}")
    public User getUserById(@PathVariable Integer id) {
        return userFeign.getUserById(id);
    }
}

//FeignClient:===================================
@FeignClient(value = "feign-provider")
@RequestMapping("/provider")
public interface UserFeign {
    
    @RequestMapping("/getUserById/{id}") //拼接url,restful风格形式拼接传参
    User getUserById(@PathVariable("id") Integer id);
}

注意的点:

1、服务提供者是正常的三层架构,服务消费者通过FeignClient调用服务提供者的服务

2、在FeignClient中,@FeignClient(value = "feign-provider")要填写服务提供者在Eureka中服务的名称

3、当在浏览器输入http://localhost:端口号/consumer/getUserById/1时,

  1. 发送请求到消费者,ConsumerController调用FeignClient
  2. Feign根据@FeignClient注解中的value值(“feign-provider”)确定要请求的服务提供者。
  3. Feign构建HTTP请求,请求的URL为"http://feign-provider/provider/getUserById/1",其中feign-provider是服务提供者的应用名称。
  4. 请求发送到服务提供者的ProviderController中的getUserById方法。

消费者通过Eureka注册自己,Feign利用Eureka进行服务发现,消费者通过Feign调用服务提供者,并返回结果。这种方式简化了服务之间的调用,并提供了动态的服务发现和负载均衡机制。

Feign参数传递的三种方式

restful传参 @PathVariable() 将参数id以restful风格拼接到路径中

@RequestMapping("/getUserById/{id}") //拼接url,restful风格形式拼接传参
User getUserById(@PathVariable("id") Integer id);  

?传参 @RequestParam【拼接?形式的url】

@RequestMapping("/deleteUserById") //拼接url, ?形式传参
User deleteUserById(@RequestParam("id") Integer id);

pojo参数传参 @RequestBody 将user对象以json字符串的形式传参

@RequestMapping("/addUser") //将user对象以json字符串的形式传参
User addUser(@RequestBody User user);

如果传输的参数是对象、Map时,需要用@RequestBody并且method = RequestMethod.POST

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值