SpringCloud文章系列
- SpringCloud
- SpringCloud-注册中心
- SpringCloud-配置中心
- SpringCloud-链路跟踪
- SpringCloud-消息总线
- SpringCloud-API网关
- SpringCloud-异步消息
- 【当前文章】SpringCloud-同步调用
- SpringCloud-断路降级
- SpringCloud-监控管理
- SpringCloud-番外篇-临时任务
- SpringCloud-番外篇-文档生成
- SpringCloud-番外篇-源码解析
接入说明
- 目前采用最新的1.xRelease版本:1.5.15.RELEASE
- SpringCloud项目可以在start.spring.io下载,不过更方便的应该是通过idea新建项目,建立Spring Initializr项目
- 我一般习惯将具体实现服务用具体的服务名,而公共组件用service-xxx来命名,当然还有一些比较固定名字的公共组件
- 基于配置中心,请先按照配置中心章节,配置公共配置
- 依赖链路追踪章节
同步调用
同步调用主要是通过HTTP去请求的,这里演示Feign的调用,重点在客户端的实现,服务端暴露接口就是普通的SpringMVC的使用
1. 新建项目
继续使用”异步调用”章节的artifactId为account-service的服务
2. 导入依赖
依赖说明
- 可以显示引入web的依赖
- actuator与eureka-server已经依赖web,其实SC中大部分组件已经强依赖web了,依赖这些组件可以不显示依赖(不过建议还是明确引入)
1 | <dependency> |
3. 编写服务端暴露接口
1 |
|
这个接口还是使用配置中心章节使用的/msg接口暴露服务
4. 启动main
5. 验证
访问http://localhost:8020/msg 可以返回配置中心的msg配置数据
客户端使用
客户端使用项目business-service演示
1. 添加依赖
1 | <dependency> |
2. 开启注解
BusinessServiceApplication上加入@EnableFeignClients开启Feign
3. 添加调用代码
1 | ("account-service") |
之前在account-service中声明的/msg接口在这里使用同样的SpringMVC的注解标注AccountRead接口接口代表远程调用的客户端
然后调用时只需要@Autowired注入即可使用
其他同步调用方式
如restfulTemplate也可以远程调用,不过不如feign方便,需要拼请求参数的URL,当前例子因为不需要拼接参数,所以看起来差不多
快速接入
在main类或者config类中构建一个RestTemplate,标记@LoadBalanced,则会采用Ribbon提供的负载均衡算法1
2
3
4
5
public RestTemplate restTemplate() {
return new RestTemplate();
}
1 |
|
疑问
如果返回的不是String,而是一个对象呢?
对象只需要在客户端这里声明一个类似的对象即可自动转换,其实中间数据都是用json传输的,类名可以不一样,只要属性一样即可匹配
请求调用的IP与端口号我想获取或者单独控制怎么实现?
Feign其实是依赖Ribbon去做负载均衡的,可以在配置中配置负载均衡策略
具体获取请求IP与端口控制可以直接使用Ribbon去请求可以获取到负载的IP与端口号,结合RestfulTempldate去请求服务
1 |
|