从小白开始学习SpringCloud(二)
话不多说还是先附上大佬博客:https://blog.csdn.net/springcyb/article/details/89147639
这一次我们来记录一下消费者的使用,上面这个博客对于新手来说我觉得不是特别的好,因为按上面操作会遇到很多坑,博主的博客没有问题但是有一些内容没写清楚,要是新手自己脑补会无法调试
1.继续在上一次的项目中创建一个spring initialzr项目,起名为spring_ribbon
2.配置端口
server: port: 8021 spring: application: name: springcloud-myribbon eureka: client: service-url: defaultZone: http://localhost:8000/eureka
3.修改主java文件
在工程的启动类中,通过@EnableDiscoveryClient向服务中心注册;并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能
package com.example.springcloud_myribbon; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @EnableEurekaClient @SpringBootApplication public class SpringcloudMyribbonApplication { public static void main(String[] args) { SpringApplication.run(SpringcloudMyribbonApplication.class, args); } // 将RestTemplate注入到spring容器中 // LoadBalanced负载均衡默认为轮询 // 通过注入在controller中就可以使用调用生产者实例 @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } }
3.消费者调用生产者
在之前的生产者springcloud-provider操作,建立一个UserController类,一定要看下面的目录结构这个很重要,很重要,很重要
UserController类所在的包和SpringcloudProviderApplication放在同一个目录下,SpringcloudProviderApplication在运行时只会配置自己子目录下的文件
代码如下
package com.example.springcloudprovider.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class UserController { /** * 测试 * * @return */ @GetMapping("testPro") @ResponseBody public String test() { System.out.println("ribbon调用生产者成功"); return "success"; } }
开始操作新建的spring_ribbon
同样新建一个UserController,目录结构参考上面的,记住目录结构很重要,代码如下
package com.example.springcloud_myribbon.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class UserController { @Autowired private RestTemplate restTemplate; /** * 调用生产者 */ //调用请求 //get 查 //Post 增 //delete 删 //put 改 @GetMapping("testPro") public String select(){ String result = restTemplate.getForObject("http://SPRINGCLOUD-USER-REG/testPro",String.class); return result; } }
4.运行项目,然后打开http://127.0.0.1:8021/testPro出现如下结果
5错误总结
如果显示的是404说明在调用过程中路径除了问题,有可能是地址写错了,也有可能时一些注解的错误,把主流程认真核对下
如果是500的问题,我遇到的就是文件目录结构的问题,一定记住Controller要在SpringcloudProviderApplication的子目录下