0


web微服务规划

一、背景

通过微服务来搭建web系统,就要对微服务进行规划,包括服务的划分,每个服务和数据库的命名规则,服务用到的端口等。

二、微服务划分

1、根据业务进行拆分

如:

一个购物系统可以将微服务拆分为基础中心、会员中心、券中心,积分中心、商品中心、订单中心、支付中心等等微服务功能。

2、端口规划:

我们可以预定义本购物系统的微服务端口采用8300-8399端口。就是这100个端口够100个服务使用,做好编排和数字字典。

3、有的服务会共用一个数据库有的服务会单独使用数据库

我们可以规划:系统_功能 为命名规则的数据库

如:

shop_user 会员中心数据库

shop_order 订单中心数据库

等等

三、微服务网关配置文件样例

  1. #应用ID
  2. app:
  3. id: xxxxxx
  4. #端口
  5. server:
  6. port: 8300
  7. #应用版本
  8. deploy:
  9. version: -v1
  10. #服务名称
  11. spring:
  12. application:
  13. name: base-gateway
  14. cloud:
  15. gateway:
  16. discovery:
  17. locator:
  18. enabled: false # 这个配置是默认给每个服务创建一个router,设置为false防止请求默认转发到url中包含的微服务名上
  19. #例:/auth/**会默认转发到服务auth下,而不是转发到配置的uri
  20. lower-case-service-id: true # 微服务名称以小写形式呈现
  21. routes:
  22. - id: base-admin #微服务路由规则
  23. uri: lb://base-admin #负载均衡,将请求转发到注册中心的base-admin
  24. predicates: #断言,如果前端请求包含/base-admin/,则走这条规则
  25. - Path=/base-admin/**
  26. filters: # 过滤器 /base-admin/** 转发到 uri/**
  27. - StripPrefix=1
  28. - id: member-business
  29. uri: lb://member-business
  30. predicates:
  31. - Path=/member-business/**
  32. filters: # /member-business/** 转发到 uri/**
  33. - StripPrefix=1
  34. #spring boot 升级到2.6.x后需要增加的配置
  35. main:
  36. allow-circular-references: true
  37. mvc:
  38. pathmatch:
  39. matching-strategy: ANT_PATH_MATCHER
  40. #注册到eureka注册中心
  41. eureka:
  42. instance:
  43. prefer-ip-address: true
  44. instance-id: ${spring.cloud.client.ip-address}:${server.port}
  45. client:
  46. service-url:
  47. defaultZone: ${eureka.defaultZone}
  48. #集成apollo配置中心
  49. apollo:
  50. bootstrap:
  51. enabled: true
  52. namespaces: application,txyunjdbc.yml,redis.yml,ctgmember.yml,weixin.yml,cloudflashpay.yml
  53. meta: http://member-config:8080
  54. management:
  55. endpoint:
  56. gateway:
  57. enabled: true
  58. endpoints:
  59. web:
  60. exposure:
  61. include: gateway #禁止外界访问 Spring Cloud Gateway actuator 端点
  62. #日志级别配置
  63. logging:
  64. level:
  65. root: INFO
  66. cn.ctg.member.dao: DEBUG

微服务启动 关停脚本样例:

  1. #命令使用:./test-plat.sh start all; ./test-plat.sh stop all; ./test-plat.sh restart all; ./test-plat.sh ** base-admin
  2. #! /bin/sh
  3. # 端口号
  4. #! /bin/sh
  5. # 端口号
  6. PORTS=(8300 8301 8302 8303 8304 8306)
  7. # 模块
  8. MODULES=(base-gateway base-admin test-business blockchain-business video data)
  9. # 模块名称
  10. MODULE_NAMES=(网关 后台管理系统 会员业务服务 区块链服务 视频服务dataservice)
  11. # jar包数组
  12. JARS=(base-gateway.jar base-admin.jar test-business.jar blockchain-business.jar video.jar data.jar)
  13. # jar包路径
  14. JAR_PATH='/home/project/test-plat/jar'
  15. # 日志路径
  16. LOG_PATH='/home/project/test-plat/logs'
  17. start() {
  18. local MODULE=
  19. local MODULE_NAME=
  20. local JAR_NAME=
  21. local command="$1"
  22. local commandOk=0
  23. local count=0
  24. local okCount=0
  25. local port=0
  26. for((i=0;i<${#MODULES[@]};i++))
  27. do
  28. MODULE=${MODULES[$i]}
  29. MODULE_NAME=${MODULE_NAMES[$i]}
  30. JAR_NAME=${JARS[$i]}
  31. PORT=${PORTS[$i]}
  32. if [ "$command" == "all" ] || [ "$command" == "$MODULE" ];then
  33. commandOk=1
  34. count=0
  35. PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
  36. if [ -n "$PID" ];then
  37. echo "$MODULE---$MODULE_NAME:已经运行,PID=$PID"
  38. else
  39. exec nohup java -Xms1024m -Xmx1024m -jar $JAR_PATH/$JAR_NAME >> $LOG_PATH/$MODULE.log 2>&1 &
  40. PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
  41. while [ -z "$PID" ]
  42. do
  43. if (($count == 30));then
  44. echo "$MODULE---$MODULE_NAME:$(expr $count \* 10)秒内未启动,请检查!"
  45. break
  46. fi
  47. count=$(($count+1))
  48. echo "$MODULE_NAME启动中.................."
  49. sleep 10s
  50. PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
  51. done
  52. okCount=$(($okCount+1))
  53. echo "$MODULE---$MODULE_NAME:已经启动成功,PID=$PID"
  54. fi
  55. fi
  56. done
  57. if(($commandOk == 0));then
  58. echo "第二个参数输入错误"
  59. else
  60. echo "............本次共启动:$okCount个服务..........."
  61. fi
  62. }
  63. stop() {
  64. local MODULE=
  65. local MODULE_NAME=
  66. local JAR_NAME=
  67. local command="$1"
  68. local commandOk=0
  69. local okCount=0
  70. for((i=0;i<${#MODULES[@]};i++))
  71. do
  72. MODULE=${MODULES[$i]}
  73. MODULE_NAME=${MODULE_NAMES[$i]}
  74. JAR_NAME=${JARS[$i]}
  75. if [ "$command" = "all" ] || [ "$command" = "$MODULE" ];then
  76. commandOk=1
  77. PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
  78. if [ -n "$PID" ];then
  79. echo "$MODULE---$MODULE_NAME:准备结束,PID=$PID"
  80. kill -9 $PID
  81. PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
  82. while [ -n "$PID" ]
  83. do
  84. sleep 3s
  85. PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
  86. done
  87. echo "$MODULE---$MODULE_NAME:成功结束"
  88. okCount=$(($okCount+1))
  89. else
  90. echo "$MODULE---$MODULE_NAME:未运行"
  91. fi
  92. fi
  93. done
  94. if (($commandOk == 0));then
  95. echo "第二个参数输入错误"
  96. else
  97. echo "............本次共停止:$okCount个服务............"
  98. fi
  99. }
  100. case "$1" in
  101. start)
  102. start "$2"
  103. ;;
  104. stop)
  105. stop "$2"
  106. ;;
  107. restart)
  108. stop "$2"
  109. sleep 3s
  110. start "$2"
  111. ;;
  112. *)
  113. echo "第一个参数请输入:start|stop|restart"
  114. exit 1
  115. ;;
  116. esac

本文转载自: https://blog.csdn.net/dongjing991/article/details/134950254
版权归原作者 奋力向前123 所有, 如有侵权,请联系我们删除。

“web微服务规划”的评论:

还没有评论