一、创建微服务父工程
父工程pom.xml配置
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
<mapper.starter.version>2.1.5</mapper.starter.version>
<mysql.version>5.1.47</mysql.version>
<pageHelper.starter.version>1.2.10</pageHelper.starter.version>
<mapper.version>1.1.5</mapper.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- springCloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 通用Mapper启动器 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${mapper.starter.version}</version>
</dependency>
<!-- 分页助手启动器 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pageHelper.starter.version}</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
二、搭建注册中心
注册中心pom.xml配置
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
注册中心配置文件application.yml
server:
port: 10001
spring:
application:
name: lcl-registry
eureka:
client:
service-url:
defaultZone: http://localhost:10001/eureka
register-with-eureka: false
fetch-registry: false
注册中心启动类
@SpringBootApplication
@EnableEurekaServer
public class LyRegistry {
public static void main(String[] args) {
SpringApplication.run(LyRegistry.class,args);
}
}
三、搭建网关
网关pom.xml配置
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
网关配置文件application.yml
server:
port: 10002
spring:
application:
name: lcl-gateway
eureka:
client:
service-url:
defaultZone: http://localhost:10001/eureka
registry-fetch-interval-seconds: 5
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 6000 # 熔断超时时长:6000ms
ribbon:
ConnectTimeout: 10000 # ribbon链接超时时长
ReadTimeout: 10000 # ribbon读取超时时长
MaxAutoRetries: 0 # 当前服务重试次数
MaxAutoRetriesNextServer: 1 # 切换服务重试次数
OkToRetryOnAllOperations: false # 是否对所有的请求方式都重试,只对get请求重试
zuul:
prefix: /api
网关启动类
@SpringBootApplication
@EnableZuulProxy
public class LyGateway {
public static void main(String[] args) {
SpringApplication.run(LyGateway.class,args);
}
}
四、创建产品微服务父工程
创建产品微服务dto
用来装实体类
创建产品微服务client
用来给别的微服务调用feign接口
创建产品微服务service
1. pom.xml配置
<dependencies>
<!--web启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--eureka客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--通用mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
</dependency>
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--实体类-->
<!--单元测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--分页助手-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2. 提供配置文件application.yml
server:
port: 8060
spring:
application:
name: product-service
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:/
username: root
password: root
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10001/eureka
mybatis:
type-aliases-package: com.lcl.product.domain
configuration:
map-underscore-to-camel-case: true
logging:
level:
com.leyou: debug
3. 提供启动类
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan("com.leyou.item.mapper")
public class LyItemApplication {
public static void main(String[] args) {
SpringApplication.run(LyItemApplication.class,args);
}
}
4. 注册网关(zull的配置文件中)
zuul:
sensitive-headers: # 任何头信息都可以通过网关
prefix: /api
routes:
product-service: /product
5. 处理器的正确返回方式
@GetMapping("/brand/page")
public ResponseEntity<PageResult<BrandDTO>> brandPageQuery(@RequestParam(value = "key",required = false) String key,
@RequestParam(value = "page",defaultValue = "1") Integer page,
@RequestParam(value = "rows",defaultValue = "5") Integer rows,
@RequestParam("sortBy") String sortBy,
@RequestParam("desc") Boolean desc){
PageResult<BrandDTO> pageResult = brandService.brandPageQuery(key,page,rows,sortBy,desc);
return ResponseEntity.ok(pageResult);
6. 需要进行统一异常处理、还要准备一些常用工具类