接上一篇的内容,本篇开始构建微服务项目
步骤一 创建父项目(创建SpringBoot项目)
1、具体步骤省略
2、在生成的项目中修改pom文件,添加项目基本的依赖,主要信息如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.kyrie</groupId>
<artifactId>spring-cloud-microservice-study</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>microservice-study</name>
<description>Demo project for Spring Boot</description>
<modules>
<module>microservice-discovery-eureka</module>
<module>microservice-provider-user</module>
<module>microservice-consumer-movie-ribbon</module>
</modules>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3、删除父项目多余文件夹(删除src文件夹)
至此一个简单的父项目已经构建完成,后面所有子项目的父项目都是该项目。所以可以在该项目中添加常用的一下依赖,否则各子项目会显得比较冗余。
步骤二 创建注册中心(在微服务架构中,服务发现是很重要的关键原则之一,SpringCloud提供了很多服务发现的实现方式,常见的有Eureka、Consul、Zookeeper)在此自己选择使用Eureka作为服务发现
1、在父项目上右击选择新建module,创建一个maven项目(过程省略)
2、在该项目的pom文件中新增如下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.0.RELEASE</version>
</dependency>
</dependencies>
3、编写EurekaApplication启动类,并添加注解@EnableEurekaServer 该注解申明一个注册中心
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args){
SpringApplication.run(EurekaApplication.class,args);
}
}
4、编辑配置文件application.yml(在默认情况下,eureka会把自己当做一个客户端注册到注册中心中,禁止这种行为)
#指定该erueka实例的端口号
server:
port: 8761
eureka:
instance:
hostname: discovery #指定该eureka的主机名
client:
registerWithEureka: false #禁止把自己作为服务注册到注册中心
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
5、启动工程,访问http://discovery:8761/eureka/(等同于访问http://locahost:8761/eureka/和http://127.0.0.1:8761/eureka/),会发现如图显示,目前还没有服务注册到注册中心
至此,一个eureka注册中心已搭建完成
接下来就让不同的服务提供者把服务注册到该注册中心中,以便服务消费者调用
步骤三 创建服务提供者(它所提供的服务需要注册到注册中心供其他消费者使用)
1 在父项目上右击选择新建module,创建一个maven项目
2 在该项目的pom文件中新增如下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
3 编辑配置文件application.yml,(核心配置是指定注册中心地址)具体信息如下:
server:
port: 8001
# 使用druid连接池
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
# 数据库的URL、帐号、密码、驱动
url: jdbc:mysql://127.0.0.1:3306/microservice?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
username: root
password: root
driverClassName: com.mysql.cj.jdbc.Driver
#连接池的配置信息
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,wall,log4j
application:
name: microservice-provider-user
#mybatis的配置
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.kyrie.provider.entity
eureka:
client:
serviceUrl:
defultZone: http://discovery:8761/eureka/ #指定注册中心地址
instance:
prefreIpAddress: true
4 利用mybatis的逆向工程生成代码
5 创建启动类,给启动类添加注解@EnableEurekaClient 申明一个客户端,注解@MapperScan(“mapper包的路径”)用于指定扫描地址
@SpringBootApplication
@EnableEurekaClient
@MapperScan("com.kyrie.provider.dao")
public class ProviderApplication {
public static void main(String[] args){
SpringApplication.run(ProviderApplication.class,args);
}
}
6 创建Controller类,注入service类,创建service类,调用service完成逻辑
@RestController
public class UserController {
@Autowired
private org.springframework.cloud.client.discovery.DiscoveryClient discoveryClients;
@Autowired
private UserService userService;
@GetMapping("/one")
public User selectByPrimaryKey(Long id){
User user = userService.selectByPrimaryKey(id);
return user;
}
@GetMapping("/list")
public List<User> getUserList(){
return userService.getUserList();
}
@GetMapping("/test")
public String test(){
return "test";
}
}
7 启动该项目(先启动服务发现的服务,即eureka),访问http://discovery:8761/eureka/(等同于访问http://locahost:8761/eureka/和http://127.0.0.1:8761/eureka/),看到本服务已经存在于注册中心
至此,一个服务已经成功的注册到了注册中心,接下来就是创建一个消费者去调用它,也就是去消费它。
项目地址github