两个服务提供者,一个服务消费者
消费者多次请求,把请求分发到不同的提供者身上,达到负载均衡的目的。
提供者:
启动类:
@EnableDiscoveryClient @SpringBootApplication public class StartServer { public static void main(String args[]) { SpringApplication.run(StartServer.class,args); } }
dao层:
@Repository public interface UserRepository extends JpaRepository<User,Long> { }
控制层:
@RestController public class UserController { @Autowired private UserRepository userRepository; @GetMapping("/{id}") public User findById(@PathVariable Long id){ User userInfo=userRepository.findOne(id); System.out.println("user-copy"); //为了注名是哪个服务提供者提供的服务,所以我在这里打印了一句话,在另一个提供者打印了 “user” return userInfo; } }
pojo:
public class User { //省略了setter/getter private Long id; private String username; private String name; private Integer age; private BigDecimal balance; }
配置文件:
spring: application: name: microservice-provider-user eureka: client: serviceUrl: defaultZone: http://localhost:8090/eureka/ healthcheck: true instance: prefer-ip-address: true jpa: show-sql: false generate-ddl: false hibernate: ddl-auto: none datasource: platform: h2 schema: classpath:schema.sql data: classpath:data.sql logging: level: root:INFO org.hibernate:INFO org.hibernate.type.descriptor.sql.BasicBinder:TRACE org.hibernate.type.descriptor.sql.BasicExtractor:TRACE server: port: 8003二、服务消费者
启动类:
@EnableDiscoveryClient @SpringBootApplication public class StartMovieRibbon { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } public static void main(String args[]) { SpringApplication.run(StartMovieRibbon.class,args); } }
控制层代码:
@RestController public class MovioRibbonController { @Value("${user.userServiceUrl}") private String userServiceUrl; @Autowired private RestTemplate restTemplate; @GetMapping("/user/{id}") public User findById(@PathVariable Long id){ return this.restTemplate.getForObject(userServiceUrl+id,User.class); } }
vo:
扫描二维码关注公众号,回复:
849530 查看本文章
public class User { private Long id; private String username; private String name; private Integer age; private BigDecimal balance; //sh }
配置文件:
server: port: 8081 info: app: name: @project.artifactId@ encoding: @project.build.sourceEncoding@ java: source: @java.version@ target: @java.version@ user: userServiceUrl: http://microservice-provider-user/ spring: application: name: microservice-consumer-movie eureka: client: serviceUrl: defaultZone: http://localhost:8090/eureka/ instance: prefer-ip-address: true
两个服务提供者是相同的,复制一份改下端口就好。
以上的步骤完成后,分别启动两个提供者和一个消费者。上面的代码加入了Eureka服务发现的组件。我们可以使用它查看程序的状态:如下图
上面可以看到我们启动的服务了。接着就是测试了。
访问:http://localhost:8081/user/1
点击了5次:两个提供服务的微服务都打印了我们预先写在程序中的输出语句。如下图:
服务提供者1:
服务提供者2:
加起来正好访问了5次:说明达到了我们负载均衡的目的
参考资料:
《Spring Cloud与Docker微服务架构实战》 。周立著