上一篇:如何实现客户端负载均衡? | 带你读《Spring Cloud Alibaba(2019)》之五
下一篇:如何基于Nacos实现分布式配置中心? | 带你读《Spring Cloud Alibaba(2019)》之七
本文来自于《精通Spring Cloud Alibaba》课程的整理,讲师为余胜军,点击查看视频内容。
本文系志愿者整理,供配合学习中心课程使用,不做商业用途。
OpenFeign客户端
OpenFeign是一个Web声明式的Http客户端调用工具,提供接口和注解形式调用。
SpringCloud第一代采用feign第二代采用openfeign
openfeign客户端作用:是一个Web声明式的Http客户端远程调用工具,底层是封装HttpClient技术。
Openfeign属于SPringleCloud自己研发,而feign是netflix代码写法几乎是没有任何变化。
构建微服务项目
mayikt-opefeign-parent---父工程
---mayikt-service-api----微服务Api接口层,定义了接口没有任何代码的业务实现
----mayikt-member-service-api---会员提供开放接口
----mayikt-order-service-api---订单提供开放接口
---mayikt-service-impl----微服务Api实现层
----mayikt-member-service-impl---会员实现层
----mayikt-order-service-api---订单实现层
微服务架构基本样式,最大的优点能够对我们feign实现复用机制。
Maven依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies>
<!-- springboot 整合web组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
</dependencies>
会员服务接口
public interface MemberService {
/**
* 提供会员接口
*
* @param userId
* @return
*/
@GetMapping("/getUser")
String getUser(@RequestParam("userId") Long userId);
}
@RestController
public class MemberServiceImpl implements MemberService {
@Value("${server.port}")
private String serverPort;
@Override
public String getUser(Long userId) {
return "我是会员服务端口号为:" + serverPort;
}
}
订单服务
@RestController
public class OrderService {
@Autowired
private MemberServiceFeign memberServiceFeign;
/**
* 订单调用会员
*
* @return
*/
@GetMapping("/orderToMember")
public String orderToMember() {
String result = memberServiceFeign.getUser(10L);
return "我是订单服务,调用会员服务接口返回结果:" + result;
}
}
@FeignClient(name = "meitemayikt-member")
public interface MemberServiceFeign extends MemberService {
// /**
// * 提供会员接口
// *
// * @param userId
// * @return
// */
// @GetMapping("/getUser")
// String getUser(@RequestParam("userId") Long userId);
}
注意feign客户端调用的事项:
如果请求参数没有加上注解的话,默认采用post请求发送。
Openfeign默认是支持负载均衡,ribbon。
Nacos服务注册 服务名称是否 有下划线?
在微服务架构中服务的名称命名不能够有下划线。