天天看点

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

一 负载均衡

大家有没有发现在上一篇中,我们已经把springcloud负载均衡的配置加入到了项目中,如下图:

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

并且restTemplate()方法上也加了实现负载均衡的注解@LoadBalanced,如图:

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

那么我们怎么来演示负载均衡呢?

我们在cloud_cart_service1项目的基础上,重新建一个cloud_cart_service2项目,提供的服务名称一致,端口号变了,如图:

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

为了方便观察效果,我在details方法上加上一句话表明结果来自哪个服务,如图所示:

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递
SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

启动两个服务提供者以及服务消费者,这时注册中心如下图:

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

可以看到这时候注册的服务提供者有2个,2222和2221。

接下来我们来执行客户端: http://localhost:9999/client/details.do?id=20191203135140574001,反复执行,发现如图所示的结果:

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递
SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

说明负载均衡实验成功了!!!!

restTemplate参数传递

对于get请求,比较简单,不作探讨,这里重点是来讲一下post请求的参数传递问题。

Post请求一般用的比较多的方法是restTemplate.postForObject(url, params,Object.class);

服务提供者如图所示:

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

服务提供者我们用@RequestParam注解来接收参数,即可接收post请求,又可以接收get请求,并输出一句话来观察参数是否接收到了

服务消费端我们也用@RequestParam注解来接收参数,如图所示:

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

接下来执行: http://localhost:9999/client/list.do,观察后台:

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

发现参数没有传递过来

接下来,我们把服务端的注解改为@RequestBody ,重新执行,观察

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

,结果如下图所示:

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

发现参数顺利传递过来了。

当服务提供者硬是要使用@RequestParam注解来接收参数呢,那客户端需要用MultiValueMap来添加参数,不能用hashmap或linkmap来封装参数了。

MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();

paramMap.add("cartType", "20190624100613533130");

也可以直接写在方法上,如图:

服务提供端:

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

服务消费端:

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

执行结果:

SpringCloud系列三:Springcloud负载均衡及restTemplate参数传递

这种方式参数也能顺利接收到

Ok,本篇到此为止,希望对您有帮助。

继续阅读