- 使用Spring Boot快速构建服务提供和服务消费者
- 问题
- 方案
- 快速构建项目
- 代码仓库
- 公众号
- 参考
使用微服务构建的是分布式系统,微服务之间通过网络进行通信。我们使用服务提供者与服务消费者来描述微服务之间的调用关系。
- 服务提供者:服务的被调用方(即:为其他服务提供服务的服务)
- 服务消费者:服务的调用方(即:依赖其他服务的服务
我们以电影售票系统为例,如图,用户向电影微服务发起了一个购票的请求。在进行购票的业务操作前,电影微服务需要调用用户微服务的接口,查询当前用户的余额是多少,是不是符合购票标准等。
在这种场景下,用户微服务就是一个服务提供者,电影微服务是一个服务消费者。
问题:如何基于 Spring Boot 快速构建服务提供者和服务消费者?
方案方案说明: 使用 IDEA 的 Spring Initializr 可以快速构建 Spring Boot 项目,为便于
测试,使用 Spring Data JPA 为持久层框架,使用 H2 作为数据库。
技术选型:
- JDK 1.8
- Spring Boot 1.4.3.RELEASE
- Spring Cloud Camden SR4
- 持久层框架:Spring Data JPA
- 数据库: H2
- 项目构建:Maven
项目依赖:
服务提供者:micro-simple-provider-user
org.springframework.boot spring-boot-starter-parent 1.4.3.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 runtime org.springframework.cloud spring-cloud-dependencies Camden.SR4 pom import
服务消费者:micro-simple-consumer-movie
org.springframework.boot spring-boot-starter-parent 1.4.3.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-dependencies Camden.SR4 pom import
服务提供者数据库脚本
- 在 micro-simple-provider-user 的 resources 目录下创建 schema.sql 表结构创建脚本和 data.sql 表数据初始化脚本。
-- schema.sql
drop table user if exists ;
create table user (
id bigint generated by default as identity,
username varchar(40),
name varchar(20),
age int(3),
balance decimal(10,2),
primary key(id)
);
-- data.sql insert into user(id,username,name,age,balance) values(1, 'account1', '张三', 20, 100.00); insert into user(id,username,name,age,balance) values(2, 'account2', '李四', 28, 180.00); insert into user(id,username,name,age,balance) values(3, 'account3', '王五', 32, 280.00);
服务提供者配置
- 指定服务启动端口及 Spring Data JPA 配置
server:
port: 8000
spring:
jpa:
generate-ddl: false
show-sql: true
hibernate:
ddl-auto: none
datasource:
platform: h2
schema: classpath:schema.sql
data: classpath:data.sql
服务提供者 Controller 、 Dao 代码编写
@RestController
@RequestMapping("/user/v1")
public class UserController {
@Resource
private UserRepository userRepository;
@GetMapping("/{id}")
public User findById(@PathVariable Long id){
User entity = userRepository.findOne(id);
return entity;
}
}
服务消费者使用 RestTemplate 调用接口
@Configuration
public class RestConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
@RestController
@RequestMapping("/movie/v1")
public class MovieController {
@Resource
private RestTemplate restTemplate;
@GetMapping("/{id}")
public User findById(@PathVariable Long id){
User entity = restTemplate.getForObject("http://localhost:8000/user/v1/"+id, User.class);
return entity;
}
}
快速构建项目
使用 IDEA 的 Spring Initializr 构建
1.点击 File->New->Project 开始构建项目,选择 Spring Initializr ,
可以选择默认的 Spring 官方默认的工程脚手架 https://start.spring.io/ ,
使用 阿里云的 Spring Boot 工程脚手架 https://start.aliyun.com 。
详情见文章:如何快速构建一个Spring Boot项目
代码仓库https://gitee.com/chentian114/spring-cloud-practice
公众号 参考《Spring Cloud 与Docker 微服务架构实战》 周立



