一、服務中的application.yml
server: port: 9004 spring: application: name: business datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.200.128:3306/changgou_business?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: root main: allow-bean-definition-overriding: true #當遇到同樣名字的時候,是否允許覆蓋注冊 rabbitmq: #添加rabbit,連接到它的虛擬機 host: 192.168.200.128 eureka: client: service-url: defaultZone: http://127.0.0.1:6868/eureka instance: prefer-ip-address: true feign: hystrix: enabled: true client: config: default: #配置全局的feign的調用超時時間 如果 有指定的服務配置 默認的配置不會生效 connectTimeout: 60000 # 指定的是 消費者 連接服務提供者的連接超時時間 是否能連接 單位是毫秒 readTimeout: 20000 # 指定的是調用服務提供者的 服務 的超時時間() 單位是毫秒 #hystrix 配置 hystrix: command: default: execution: timeout: #如果enabled設置為false,則請求超時交給ribbon控制 enabled: true isolation: strategy: SEMAPHORE thread: # 熔斷器超時時間,默認:1000/毫秒 timeoutInMilliseconds: 20000
1、Thread和Semaphore的區別?
- Thread:這是比較常用的隔離策略,即根據配置把不同的命令分配到不同的線程池中,該策略的優點是隔離性好,並且可以配置斷路,某個依賴被設置斷路之后,系統不會再嘗試新起線程運行它,而是直接提示失敗,或返回fallback值;缺點是新起線程執行命令,在執行的時候必然涉及到上下文的切換,這會造成一定的性能消耗,但是Netflix做過實驗,這種消耗對比其帶來的價值是完全可以接受的。
- Semaphore:開發者可以限制系統對某一個依賴的最高並發數。這個基本上就是一個限流的策略。每次調用依賴時都會檢查一下是否到達信號量的限制值,
二、Eureka中的application.yml
server: port: 6868 # 微服務端口號 eureka: client: register-with-eureka: false #是否將自己注冊到eureka中。自己不提供服務,不注冊。若是集群,則注冊。 fetch-registry: false #是否從eureka中獲取信息 service-url: defaultZone: http://127.0.0.1:${server.port}/eureka/ # EurekaServer的地址,自己的地址;如果是集群,需要寫其它Server的地址。
三、gateway中的appliction.yml
1 spring: #使用spring框架 2 application: 3 name: sysgateway 4 cloud: #使用springcloud微服務框架 5 gateway: 6 globalcors: #全局配置 7 cors-configurations: 8 '[/**]': # 匹配所有請求 9 allowedOrigins: "*" #跨域處理 允許所有的域 10 allowedMethods: # 支持的方法 11 - GET 12 - POST 13 - PUT 14 - DELETE 15 routes: 16 # 路由id,可以隨意寫 17 - id: goods 18 # 代理的服務地址 19 uri: lb://goods 20 # 路由斷言,可以配置映射路徑 21 predicates: 22 - Path=/goods/** 23 # 過濾器 24 filters: 25 - StripPrefix= 1 26 - name: RequestRateLimiter #請求數限流 名字不能隨便寫 27 args: 28 key-resolver: "#{@ipKeyResolver}" 29 redis-rate-limiter.replenishRate: 1 #令牌桶每秒填充平均速率 30 redis-rate-limiter.burstCapacity: 1 #令牌桶總容量 31 - id: system 32 uri: lb://system 33 predicates: 34 - Path=/system/** 35 filters: 36 # 表示過濾1個路徑,2表示兩個路徑,以此類推 37 - StripPrefix= 1 38 redis: 39 host: 192.168.200.128 40 server: 41 port: 9101 42 eureka: # 在gateway中注冊Eureka 43 client: 44 service-url: 45 defaultZone: http://127.0.0.1:6868/eureka 46 instance: 47 prefer-ip-address: true
spring: application: name: gateway-web cloud: gateway: globalcors: cors-configurations: '[/**]': # 匹配所有請求 allowedOrigins: "*" #跨域處理 允許所有的域 allowedMethods: # 支持的方法 - GET - POST - PUT - DELETE routes: - id: changgou_goods_route uri: lb://goods predicates: - Path=/api/album/**,/api/brand/**,/api/cache/**,/api/categoryBrand/**,/api/category/**,/api/para/**,/api/pref/**,/api/sku/**,/api/spec/**,/api/spu/**,/api/stockBack/**,/api/template/** filters: #- PrefixPath=/brand - StripPrefix=1 #用戶微服務 - id: changgou_user_route uri: lb://user predicates: - Path=/api/user/**,/api/address/**,/api/areas/**,/api/cities/**,/api/provinces/** filters: - StripPrefix=1 #認證微服務 - id: changgou_oauth_user uri: lb://user-auth predicates: - Path=/api/oauth/** filters: - StripPrefix=1 #訂單微服務 - id: changgou_order_route uri: lb://order predicates: - Path=/api/cart/**,/api/categoryReport/**,/api/orderConfig/**,/api/order/**,/api/orderItem/**,/api/orderLog/**,/api/preferential/**,/api/returnCause/**,/api/returnOrder/**,/api/returnOrderItem/** filters: - StripPrefix=1 #購物車訂單渲染微服務 - id: changgou_order_web_route uri: lb://order-web predicates: - Path=/api/wcart/**,/api/worder/**,/api/wxpay/** filters: - StripPrefix=1 #秒殺渲染微服務 - id: changgou_seckill_web_route uri: lb://seckill-web predicates: - Path=/api/wseckillgoods/**,/api/wseckillorder/** filters: - StripPrefix=1 redis: host: 192.168.200.128 server: port: 8001 eureka: client: service-url: defaultZone: http://127.0.0.1:6868/eureka instance: prefer-ip-address: true management: endpoint: gateway: enabled: true web: exposure: include: true
四、 Spring Cloud 體系技術綜合應用概覽
Eureka注冊中心--------->管理微服務地址和狀態信息
Feign---------->微服務之間遠程調用;(封裝RestTemplate Ribbon)
Gateway------->微服務統一入口。(路由+過濾器)
Config-------->管理微服務配置文件