spring-cloud-example
微服务开发
git源码地址
1.微服务配置中心(config)和注册中心(eureka)
2.登录注册接口实例
3.token生成与校验
微服务
- 单一职责:每一个微服务应该是单一独立模块的功能,一个微服务解决一个业务问题(并非只一个接口),这就呈现了“微”的体现。
- 面向服务:每个服务将自己业务功能进行封装并暴露对外提供服务,服务与服务之间可以相辅相成的作用。
配置中心
微服务架构
微服务搭建
1. 创建Maven父项目spring-cloud-examples,用于管理项目依赖包版本。pox.xml配置
org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
...
org.springframework.cloud
spring-cloud-dependencies
${spring.cloud.version}
pom
import
2. 配置中心
- 在spring-cloud-examples项目下创建子项目spring-cloud-example-config,并添加spring-cloud-config-server核心依赖包。pox.xml配置
org.springframework.cloud
spring-cloud-config-server
- 在项目中的resources目录下添加application.yml,配置如下:
spring:
application:
name: spring-cloud-example-config
profiles:
active: native #启用本地配置文件
cloud:
config:
server:
native:
search-locations: classpath:/configs/ #配置文件扫描目录
server:
port: 8000 #服务端口
- 启动类ConfigApplication添加注解@EnableConfigServer,通过启用Config Service服务
@SpringBootApplication
@EnableConfigServer
public class ConfigApplication {
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(ConfigApplication.class, args);
}
}
3. 注册中心
- 在spring-cloud-examples项目下创建子项目spring-cloud-example-register,并添加spring-cloud-netflix-eureka-server和spring-cloud-starter-config核心依赖包。pox.xml配置
- 在项目中的resources目录下添加bootstrap.yml。
spring:
cloud:
config:
name: spring-cloud-example-registry #配置文件名称,多个通过逗号分隔
uri: http://localhost:8000 #Config Server服务地址
- 在spring-cloud-example-config项目中的resources添加configs目录,并且添加一个服务配置文件spring-cloud-example-registry.yml。
spring:
application:
name: spring-cloud-example-registry
# Eureka相关配置
eureka:
client:
register-with-eureka: false #不注册服务
fetch-registry: false #不拉去服务清单
serviceUrl:
defaultZone: http://localhost:${server.port}/eureka/ #多个通过英文逗号分隔
server:
port: 8001
- 启动类EurekaApplication添加注解@EnableEurekaServer通过启用Eureka Server服务。
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(EurekaApplication.class, args);
}
}
搭建业务服务A(B、C、D...)
- 在spring-cloud-examples项目下创建子项目spring-cloud-example-a(b、c、d...),并在相应的服务中添加相应的pox.xml,以下以服务A为案例:
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-config
...
- 在项目中的resources目录下添加bootstrap.yml。
spring:
cloud:
config:
name: spring-cloud-example-biz-a #配置文件名称,多个通过逗号分隔
uri: http://localhost:8000 #Config Server服务地址
- 在spring-cloud-example-config项目中的resources添加configs目录,并且添加一个服务配置文件spring-cloud-example-a.yml。
spring:
application:
name: biza
server:
port: 8010
# Eureka相关配置
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8001/eureka/
instance:
lease-renewal-interval-in-seconds: 10 # 心跳时间,即服务续约间隔时间(缺省为30s)
lease-expiration-duration-in-seconds: 60 # 发呆时间,即服务续约到期时间(缺省为90s)
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
搭建服务网关
- 在spring-cloud-examples项目下创建子项目spring-cloud-example-gateway,pom.xml如下:
org.springframework.cloud
spring-cloud-starter-netflix-zuul
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-config
- 在项目中的resources目录下添加bootstrap.yml。
- 在spring-cloud-example-config项目中的resources添加configs目录,并且添加一个服务配置文件spring-cloud-example-gateway.yml。
spring:
application:
name: spring-cloud-example-gateway
server:
port: 8002
# Eureka相关配置
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8001/eureka/
instance:
lease-renewal-interval-in-seconds: 10 # 心跳时间,即服务续约间隔时间(缺省为30s)
lease-expiration-duration-in-seconds: 60 # 发呆时间,即服务续约到期时间(缺省为90s)
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
zuul:
routes:
custom-route-a:
url: http://localhost:8010/ # 指定的url
path: /biza/** # url对应的路径
custom-route-b:
url: http://localhost:8011/ # 指定的url
path: /bizb/** # url对应的路径
host:
connect-timeout-millis: 15000 #HTTP连接超时要比Hystrix的大
socket-timeout-millis: 60000 #socket超时
ribbon:
ReadTimeout: 10000
ConnectTimeout: 10000
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 100000
- 启动类GatewayApplication添加注解@EnableZuulProxy通过启用网关代理服务。
@SpringBootApplication
@EnableZuulProxy
public class GatewayApplication {
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(GatewayApplication.class, args);
}
}
到此,配置中心、注册中心以及网关配置都已经配置好了,可以按顺序启动服务了
spring-cloud-example-config>>spring-cloud-example-eureka>>spring-cloud-example-a/spring-cloud-example-b/spring-cloud-example-gateway
微服务搭建原文