AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
* 创建一个 Maven 项目 microservice-consumer-movie-ribbon ~~~bash mvn archetype:generate -DgroupId=com.shiyanlou -DartifactId=microservice-consumer-movie-ribbon -DarchetypeArtifactId=maven-archetype-quickstart ~~~ * 复制项目`microservice-consumer-movie`中的内容 ,将`ArtifactId`修改为`microservice-consumer-movie-ribbon`。 * `Maven`引入依赖:由于`spring-cloud-starter-netflix-eureka-client`已经包含`spring-cloud-starter-netfilx-ribbon`,故而无需额外添加依赖。 * 编写代码`App.java`: ~~~java package com.shiyanlou; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; import org.springframework.cloud.client.loadbalancer.LoadBalanced; @SpringBootApplication @EnableDiscoveryClient public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } } ~~~ 如代码所示,只需在`RestTemplate`上添加`LoadBalanced`注解,即可让`RestTemplate`整合`Ribbon`! * 最后进行负载均衡调用`MovieController.java`: ~~~java package com.shiyanlou; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RequestMapping("/movies") @RestController public class MovieController { @Autowired RestTemplate restTemplate; @GetMapping("/users/{id}") public User findById(@PathVariable Long id){ // 这里用到了RestTemplate的占位符能力 User user=this.restTemplate.getForObject("http://microservice-provider-user/users/{id}",User.class,id); return user; } } ~~~ 由代码可知,我们将请求的目标服务改成`http://microservice-provider-user/users/{id}`,也就是`http://{目标服务名称}/{目标服务端点}`的形式,**Ribbon 会自动在实际调用时,将目标服务名替换为该服务的 IP 和端口。** * 最终目录结构 ![](https://img.kancloud.cn/4e/3b/4e3b6385496a370e3e2a0d6ef19c5022_338x282.png)