Feign是什么?
Feign是一个声明式WebService客户端.使用Feign能让编写WebService客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解.Feign也支持可拔插式的编码器和解码器.Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters.Feign可以与Eureka和Ribbon组合使用以支持负载均衡.
只需要你创建一个接口,然后在上面添加注解即可.
下面进行一个实例说明,首席按创建一个MAVEN项目,添加五个工程
1、eureka服务注册中心
2、会员服务接口api
3、会员服务实现
4、订单服务接口api
5、订单服务实现
这里我把
两个服务的接口api放到一起了,严格来说这样不是很规范。
规范应该是这样的结构
cloud-parent
--api-service-impl
----api-feign-ImemberIpml 端口:8190
----api-feign-IorderIpml 端口:8191
--api-feign
----api-feign-ImemberService
----api-feign-IorderService
--eureka服务注册中心 端口8180
在parent pom文件中加入Feign依赖,
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.2.1.RELEASE</version> </dependency>
启动类都加入注解
@SpringBootApplication @EnableEurekaClient @EnableFeignClients
会员,订单服务实现接口api编写接口
两个服务的接口我这里为了方便写的一样的 。
然后会员实现模块中新增一个实现类
package com.cloud.apimember.memberApi; import com.cloud.cloudapi.entity.User; import com.cloud.cloudapi.feignApi.IfeignMemberApi; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class memberSerive implements IfeignMemberApi { @RequestMapping("/getUser") public String getUser(String name) { return "this member 8190"; } @RequestMapping("/user") public User user(@RequestParam(value = "name") String name, @RequestParam(value = "age") String age) { User user = new User(); user.setAge(age); user.setName("订单服务调用会员服务"); return user; } }
订单模块也一样
package com.cloud.apiorder.orderImpl; import com.cloud.apiorder.feignUtils.MemberInstance; import com.cloud.cloudapi.entity.User; import com.cloud.cloudapi.feignApi.IfeignApi; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController @Configuration public class orderImpl implements IfeignApi { @Autowired private MemberInstance memberInstance; @Bean @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } @RequestMapping("/getUser") public String getUser(String name) { RestTemplate rs = getRestTemplate(); return "this order"; } @RequestMapping("/user") public User user(@RequestParam(value = "name") String name, @RequestParam(value = "age") String age) { User user1 = memberInstance.user(name, age); return user1; } }
做完这些先测试各自接口能不能接通。
没问题之后看订单服务如何调用会员服务的接口。
首先,在订单实现模块 pom中加入会员接口api的依赖
在订单实现模块中添加一个接口集成会员的接口
package com.cloud.apiorder.feignUtils; import com.cloud.cloudapi.feignApi.IfeignMemberApi; import org.springframework.cloud.openfeign.FeignClient; @FeignClient("memberService") public interface MemberInstance extends IfeignMemberApi { }
这样就可以直接在订单服务中调用会员服务了。
成功结果如下
写的比较糙,估计各位也看不懂,瞎搞了一下。
想系统学习建议去找找别的大神的博客。哈哈哈哈哈。