服务提供者与消费者 使用微服务构建的是分布式系统,微服务直接通过网络进行通信,服务提供者与服务消费者来描述微服务直接的关系。
服务提供者:服务的被调用方(为其他服务提供服务的服务)
服务消费者:服务的调用方(依赖其他服务的服务)
本次提供一个用户微服务作为服务提供者,该服务可以通过主键查询用户信息。使用Spring Data JPA作为持久性框架,使用h2作为数据库。
1.在父项目上创建一个作为provider的 model,创建方式和第一篇文章同理。在父项目gradle文件夹中创建对应的.gradle文件管理独有的依赖。
project(':maoj-eureka-provider'){
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
runtime('com.h2database:h2')
}
}
2.按照第一篇文章的方式更改父项目的build.gradle和settings.gradle。引入新的模块依赖。
3.在项目的classpath下建立schema.sql,data.sql并添加如下内容:
//schema.sql
drop table user if exists;
create table user (id bigint generated by default as identity ,username varchar ,name varchar ,primary key (id));
//data.sql
insert into user(id, username, name) values (1,'account1','张三');
insert into user(id, username, name) values (2,'account2','李四');
insert into user(id, username, name) values (3,'account3','王五');
4.编写业务代码,添加用户实体,和查询接口
创建用户实体
@Entity
public class User implements Serializable {
private static final long serialVersionUID = 3070319358435109259L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column
private String username;
@Column
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
创建用户repository
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
创建用户resource
@RestController
public class UserResource {
@Autowired
private UserRepository userRepository;
@GetMapping(path = "/users/{id}")
public User getUser(@PathVariable Long id){
return userRepository.findById(id).get();
}
}
4.在启动类上添加@EnableDiscoveryClient主键,更改application.yml配置文件,将这个服务注册到eureka 注册中心
spring:
application:
name: maoj-eureka-provider ##用于指定注册到eureka server上的应用名称
jpa:
generate-ddl: false
show-sql: true
hibernate:
ddl-auto: none
datasource:
platform: h2
schema: classpath:schema.sql
data: classpath:data.sql
eureka:
client:
server-url:
default-zone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true ##表示将自己的ip注册到eureka server上
logging:
level:
root: INFO
org.hibernate: INFO
server:
port: 8000
启动eureka server项目和provider项目,访问localhost:8761可以看到服务已经注册到了注册中心,访问localhost:8000/users/1可以看到网页上打印的用户信息。
下一篇将编写一个微服务,来作为本服务的消费者,用来理解服务之间是如何进行通信的。