继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【九月打卡】第19天 SpringCloud微服务学习

逆流的鱼_飞
关注TA
已关注
手记 24
粉丝 1
获赞 0

课程名称:SpringCloud  Finchley三版本微服务实战

课程章节:

第5章 应用通信

主讲老师:廖师兄

课程内容:

   HTTP、RPC,服务之间的负载均衡调用

课程收获:

1、SpringCloud中服务间的两种restful调用方式:

(1).RestTemplate

(2).Feign

http://img1.sycdn.imooc.com/632d0a4b0001c86815660867.jpg


2、SpringCLoud服务中的三种通信方式

1、RestTemplate

RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。

restTemplate.getForObject(要访问的URL, 用于接受结果的类型.class, 入参)

入参可以使用Map的形式,也可以以可变参数的形式,

定义:

可变参数:

String result = template.getForObject( "url/{count}/{page}", String.class, "5", "1"); 

//restTemplate会对参数进行URI编码


第一种方式(直接使用RestTemplate,url写死)

RestTemplate restTemplate  =  new RestTemplate ();
String response = restTemplate.getForObject("http://localhost:8080/msg", String.class );

url写死的,只能写一个地址


第二种方式(利用LoadBalanceClient获取url,再使用RestTemplate)

@Autowired
private LoadBalanceClient loadBalanceClient ;
ServiceInstance serviceInstance = loadBalanceClient .choose("PRODUCT");
String url = String.format("http://%s:%s",serviceInstance.getHost(), serviceInstance.getPort() + "/msg");
String response = restTemplate.getForObject(url , String.class);


写法麻烦

第三种方式(利用@LoadBalanced可在restTemplate里使用应用名字)

@Component
public class RestTemplateConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
@Autowired 
private RestTemplate restTemplate;
String response = restTemplate.getForObject("http://PRODUCT/msg", String.class);


3、Ribbon实现软负载均衡核心:

(1)、服务发现:发现依赖服务的列表(依据服务的名字,把所有实例都找出来)

(2)、服务选择规则:依据规则策略如何从多个服务中选择一个有效的服务

(3)、服务监听: 检测失效的服务,做到高效剔除


4、订单查询商品服务

注意要点:

(1)、使用@requestbody注解以后必须使用post提交

(2)、@PathVariable注解对应着get请求

http://img4.sycdn.imooc.com/632d0a2700014b6015420816.jpg

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP