1、首先在公共模块demo-api中写好接口
2、demo-api接口如下;
** “声明式调用”就是定义一个公共的接口,由提供方来实现,消费方来调用 消费方直接注入此接口,调方法 用FeignClient注解绑定一个提供方的服务名,如 @FeignClient("SIMPLE-PROVIDER"),前提是提供方已经把服务注册到注册中心了 注意: 1、接口里的参数前面一定要加注解 如“@RequestParam("id") String id、@RequestBody SimpleUser user” 2、接口要符合Restful风格的规范
3、在provider中进行接口的实现,前提是provider模块已经作为一个服务发布了。
** 服务提供方 实现服务api接口,提供服务,尽量简洁,推荐一个类搞定 微服务分三层 原子层,服务的最底层,是服务的最小单元,往往直接操作数据库 聚合层,把原子层的接口组织起来进行分类 应用层,调用聚合层,处理业务逻辑 本服务属于原子层
4、对于接口的调用,消费者可以采用两种方式
一、采用feign声明式调用
二、采用restTemplate直接调用(有多种方式)
@RestController public class DemoConsumerController { @Autowired //注入声明式调用的接口(feign) private DemoApi api; @Autowired //注入客户端负载均衡调用的bean(ribbon) private RestTemplate t; /** * feign声明式调用 * @param name * @return */ @RequestMapping(value="/demo/hello") public String hello(String name) { return api.hello("hello world !"); } /** * ribbon负载均衡调用 * @param name * @return */ @RequestMapping(value="/demo/hello2") public String hello2(String name) { String result = t.getForEntity("http://DEMO-PROVIDER/demo/hello?name=test", String.class).getBody(); return result; } }
服务分三层 原子层,服务的最底层,是服务的最小单元,往往直接操作数据库 聚合层,把原子层的接口组织起来进行分类 应用层,调用聚合层,处理业务逻辑 本服务属于聚合层 + 应用层 feign方式,接口注入方式() ribbon,客户端负载均衡方式()
5、restTemplate 对象需要在启动类之前创建后,才可以在接口中注入,或者采用java配置类的方式
restTemplate 采用java配置类创建
RestTemplate调用服务的另外一种方法