记录下自己最近在项目中使用的spring cloud框架
spring cloud 是基于spring boot实现的微服务架构开发工具,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
一、依赖
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-eureka-serverartifactId>
dependency>
二、application.yml配置
server:
port: 8761
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka
三、通过 @EnableEurekaServer 应用程序可以作为一个独立的服务
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
其它需要注册进euerka的服务也需要加上@EnableEurekaServer
euerka+security
用security为eureka(注册中心)添加简单的用户认证
maven依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-securityartifactId>
dependency>
配置文件
security:
basic:
enabled: true # 开启基于HTTP basic的认证,如果不设置这段内容,账号默认是user,密码就是一个随机值,该值会在启动的时候打印出来。
user:
name: 账号
password: 密码
#ereuka配置也需要做相应的修改
eureka:
client:
register-with-eureka: false #是否向服务注册中心注册自己
fetch-registry: false #是否检索服务
service-url: #服务注册中心的配置内容,指定服务注册中心的位置
defaultZone: http://账号:密码@localhost:8761/eureka #其它需要注册进注册中心的服务,也需要加上账号密码
zuul可作为服务器端的负载均衡
使用步奏:
一、依赖
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-zuulartifactId>
dependency>
因为继承了父类 ,所以不需要配置jar的版本
二、application.yml配置
zuul:
routes:
api-a:#让zuul反向代理微服务,路径是/admin_user api-a只要是唯一的就行,可随意写
path: /admin_user/**
service-id: zjlmb-user
sensitiveHeaders:
api-b:
path: /merchant_user/**
service-id: zjlmb-merchant
ignoredHeaders:
path和service-id表示,/admin_user/开头的url请求,将转发到zjlmb-user这个微服务上,/merchant_user/开头的url请求,将转发到zjlmb-merchant这个微服务上。
sensitiveHeaders会过滤客户端附带的headers
ignoredHeaders会过滤服务之间通信附带的headers
例子一(zuul服务的端口为8080):
除了myuser开头的url,其它url全部不通过,且myuser开头的url访问的是serviceid为zjlmb-user的服务
http://localhost:8080/zjlmb-merchant/test/hello (404)
http://localhost:8080/myuser/test/hello (200)
zuul:
ignoredServices: '*'
routes:
zjlmb-user: /myuser/** #zjlmb-user必须是一个服务id
或者
zuul:
ignoredServices: '*'
routes:
api: #api只要是唯一的就行,可随意写
path: /myuser/**
serviceId: zjlmb-user
上面俩种写法效果一样
三、通过 @EnableZuulProxy 应用程序可以作为一个独立的服务
注意:zuul不包含服务发现的客户端,所以想要基于ServiceID去路由的话,需要提供一个服务发现的客户端(discovery client),例如 eureka
@SpringBootApplication
@EnableZuulProxy
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
}
zuul+eureka
不需要在zuul项目启动器加上@EnableEurekaClient注解,在@EnableZuulProxy:
@EnableCircuitBreaker
@EnableDiscoveryClient
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(ZuulProxyConfiguration.class)
public @interface EnableZuulProxy {
}
当然也需要在配置文件中将zuul注册到eureka中
spring:
application:
name: zjlmb-zuul
eureka:
client:
serviceUrl:
defaultZone: http://账号:密码@localhost:8761/eureka
instance:
prefer-ip-address: true