上篇文章已经初步完成搭建SpringCloud。接下来,要实现api-pay和api-user两个接口。我们假设用户进行支付时会优先调用用户接口进行用户信息查询。这时需要在用户接口定义用户模型:
这里的port是调用服务的端口号,用来在后面演示负载均衡使用。
然后创建IUser接口和IPay接口,每个接口只有一个方法。
public interface IUser{
@RequestMapping("/getUserEntity")
UserEntity getUserEntity(@RequestParam("id") String id);
}
public interface IPay{ @RequestMapping("/pay") public String pay(@RequestParam("id")String id,@RequestParam("money") double money); }
接下来要实现业务逻辑,就是调用IPay接口的pay方法时会调用IUser接口的getUserEntity获取到用户信息。需要分别实现上一节创建的两个EurekaDiscoveryClient(pay-impl和user-impl)。User-impl创建接口的实现类做一个接口的返回,这里先加上所有代码,稍后解释:
@RestController public class User implements IUser { @Value("${server.port}") private String port; @Override @RequestMapping("/getUserEntity") public UserEntity getUserEntity(@RequestParam("id") String id) { UserEntity ue = new UserEntity(); ue.setId(id); ue.setName ("名字"+id); ue.setPort(port); return ue; } }
@RestController、@RequestMapping和@RequestParam连用来返回一个web界面这里不做解释。@Value(“${server.port}”)是注入配置的接口端口号到port,稍后我们讲下配置。这里只是实现简单的UserEntity的生成和返回。
接下来pay-iml创建实现类Pay
@RestController public class Pay implements IPay { @Value("${server.port}") private String port; @Autowired private Userfeigin userfeigin; @Override @RequestMapping("/pay") public String pay(@RequestParam("id")String id, @RequestParam("money")double money) { UserEntity userEntity = userfeigin.getUserEntity(id); return "来自"+userEntity.getPort()+"端口的"+userEntity.getName()+"通过端口"+port+"支付"+money; } }
同样实现pay方法:这里输出来自用户服务接口通过本服务接口进行支付。这里两个端口号分别是用户服务端口号和支付服务端口号。@Autowired这里的自动注入也在后续的讲解配置时介绍。为了更好的展示效果,我们再写一个用来调用支付服务的方法(也可以直接调用支付接口来看,但看不到两个服务同时负载均衡)。这里取名为Test。同样作为EurekaDiscoveryClient创建,这里实现很简单,就是通过test方法调用支付接口:
@RestController public class Test { @Autowired private PayFegin payFegin; @RequestMapping("/test") public String test(){ return payFegin.pay("11",10.05); } }
至此所有的业务逻辑相关的工作都完成了,下一篇介绍Eureka服务端和客户端的配置、Fegin作为服务发现及效果的展示。