经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » ASP.net » 查看文章
.net core微服务之服务发现
来源:cnblogs  作者:六指狂魔肉球猫  时间:2024/2/21 9:28:14  对本文有异议

一:nacos

  https://nacos.io/docs/latest/what-is-nacos/

  https://github.com/alibaba/nacos

二:consul

  https://developer.hashicorp.com/consul/docs?product_intent=consul

  https://github.com/hashicorp/consul

服务发现的框架常用的还有zookeeper eureka等,这里准备使用nacos

前置条件准备 docker,yaml

  1. version: "3.8"
  2. networks:
  3. caseor_bridge:
  4. driver: bridge
  5. ipam:
  6. config:
  7. - subnet: 172.0.10.0/24
  8. services:
  9. mysql:
  10. container_name: mysql
  11. image: mysql
  12. privileged: true
  13. command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --max_connections=2000 --max_allowed_packet=64M
  14. environment:
  15. - TZ=Asia/Shanghai
  16. - MYSQL_ROOT_PASSWORD=123456
  17. volumes:
  18. - ./mysql:/var/lib/mysql
  19. ports:
  20. - "3306:3306"
  21. healthcheck:
  22. test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
  23. interval: 5s
  24. timeout: 10s
  25. retries: 10
  26. networks:
  27. caseor_bridge:
  28. ipv4_address: 172.0.10.3
  29. redis:
  30. image: redis
  31. container_name: "redis"
  32. ports:
  33. - "6379:6379"
  34. volumes:
  35. - ./redis/data:/data
  36. - ./redis/conf:/usr/local/etc/redis
  37. networks:
  38. caseor_bridge:
  39. ipv4_address: 172.0.10.4
  40. nacos1:
  41. container_name: nacos1
  42. hostname: nacos1
  43. image: nacos/nacos-server
  44. environment:
  45. - MODE=cluster
  46. - PREFER_HOST_MODE=hostname
  47. - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
  48. - SPRING_DATASOURCE_PLATFORM=mysql
  49. - MYSQL_SERVICE_HOST=172.0.10.3
  50. - MYSQL_SERVICE_PORT=3306
  51. - MYSQL_SERVICE_USER=root
  52. - MYSQL_SERVICE_PASSWORD=123456
  53. - MYSQL_SERVICE_DB_NAME=nacos
  54. - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
  55. - JVM_XMS=128m
  56. - JVM_XMX=128m
  57. - JVM_XMN=128m
  58. volumes:
  59. - ./nacos/cluster-logs/nacos1:/home/nacos/logs
  60. - ./nacos/init.d:/home/nacos/init.d
  61. ports:
  62. - 8850:8848
  63. - 7850:7848
  64. - 9870:9848
  65. - 9852:9849
  66. depends_on:
  67. - mysql
  68. networks:
  69. caseor_bridge:
  70. ipv4_address: 172.0.10.5
  71. nacos2:
  72. container_name: nacos2
  73. hostname: nacos2
  74. image: nacos/nacos-server
  75. environment:
  76. - MODE=cluster
  77. - PREFER_HOST_MODE=hostname
  78. - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
  79. - SPRING_DATASOURCE_PLATFORM=mysql
  80. - MYSQL_SERVICE_HOST=172.0.10.3
  81. - MYSQL_SERVICE_PORT=3306
  82. - MYSQL_SERVICE_USER=root
  83. - MYSQL_SERVICE_PASSWORD=123456
  84. - MYSQL_SERVICE_DB_NAME=nacos
  85. - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
  86. - JVM_XMS=128m
  87. - JVM_XMX=128m
  88. - JVM_XMN=128m
  89. volumes:
  90. - ./nacos/cluster-logs/nacos2:/home/nacos/logs
  91. - ./nacos/init.d:/home/nacos/init.d
  92. ports:
  93. - 8849:8848
  94. - 7849:7848
  95. - 9869:9848
  96. - 9851:9849
  97. depends_on:
  98. - mysql
  99. networks:
  100. caseor_bridge:
  101. ipv4_address: 172.0.10.6
  102. nacos3:
  103. container_name: nacos3
  104. hostname: nacos3
  105. image: nacos/nacos-server
  106. environment:
  107. - MODE=cluster
  108. - PREFER_HOST_MODE=hostname
  109. - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
  110. - SPRING_DATASOURCE_PLATFORM=mysql
  111. - MYSQL_SERVICE_HOST=172.0.10.3
  112. - MYSQL_SERVICE_PORT=3306
  113. - MYSQL_SERVICE_USER=root
  114. - MYSQL_SERVICE_PASSWORD=123456
  115. - MYSQL_SERVICE_DB_NAME=nacos
  116. - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
  117. - JVM_XMS=128m
  118. - JVM_XMX=128m
  119. - JVM_XMN=128m
  120. volumes:
  121. - ./nacos/cluster-logs/nacos3:/home/nacos/logs
  122. - ./nacos/init.d:/home/nacos/init.d
  123. ports:
  124. - 8848:8848
  125. - 7848:7848
  126. - 9848:9848
  127. - 9849:9849
  128. depends_on:
  129. - mysql
  130. networks:
  131. caseor_bridge:
  132. ipv4_address: 172.0.10.7
  133. etcd:
  134. container_name: etcd
  135. hostname: etcd
  136. image: bitnami/etcd
  137. volumes:
  138. - ./etcd/data:/bitnami/etcd
  139. environment:
  140. ETCD_ENABLE_V2: "true"
  141. ALLOW_NONE_AUTHENTICATION: "yes"
  142. ETCD_ADVERTISE_CLIENT_URLS: "http://etcd:2379" #https://github.com/apache/apisix-dashboard/issues/2756 需要更换为host域名不能使用0.0.0.0
  143. ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
  144. ports:
  145. - "2379:2379/tcp"
  146. networks:
  147. caseor_bridge:
  148. ipv4_address: 172.0.10.8
  149. apisix:
  150. container_name: apisix
  151. hostname: apisix
  152. image: apache/apisix
  153. volumes:
  154. - ./apisix/log:/usr/local/apisix/logs
  155. - ./apisix/conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro
  156. depends_on:
  157. - etcd
  158. ports:
  159. - "9088:9088/tcp"
  160. - "9180:9180/tcp"
  161. - "127.0.0.1:9090:9090/tcp"
  162. networks:
  163. caseor_bridge:
  164. ipv4_address: 172.0.10.9
  165. apisix-dashboard:
  166. container_name: apisix-dashboard
  167. image: apache/apisix-dashboard
  168. depends_on:
  169. - etcd
  170. ports:
  171. - "9188:9188"
  172. volumes:
  173. - ./apisix/conf/dashboard.yaml:/usr/local/apisix-dashboard/conf/conf.yaml
  174. networks:
  175. caseor_bridge:
  176. ipv4_address: 172.0.10.10
  177. rabbitmq01:
  178. image: rabbitmq
  179. container_name: rabbitmq01
  180. hostname: rabbitmq01
  181. environment:
  182. - TZ=Asia/Shanghai
  183. - RABBITMQ_DEFAULT_USER=root #自定义登录账号
  184. - RABBITMQ_DEFAULT_PASS=123456 #自定义登录密码
  185. - RABBITMQ_ERLANG_COOKIE='secret_cookie'
  186. ports:
  187. - "15672:15672"
  188. - "5672:5672"
  189. volumes:
  190. - ./rabbitmq/mq1/data:/var/lib/rabbitmq
  191. - ./rabbitmq/mq1/conf:/etc/rabbitmq
  192. command: bash -c "sleep 10; rabbitmq-server;"
  193. networks:
  194. caseor_bridge:
  195. ipv4_address: 172.0.10.11
  196. rabbitmq02:
  197. image: rabbitmq
  198. container_name: rabbitmq02
  199. hostname: rabbitmq02
  200. environment:
  201. - TZ=Asia/Shanghai
  202. - RABBITMQ_DEFAULT_USER=root #自定义登录账号
  203. - RABBITMQ_DEFAULT_PASS=123456 #自定义登录密码
  204. - RABBITMQ_ERLANG_COOKIE='secret_cookie'
  205. ports:
  206. - "15673:15672"
  207. - "5673:5672"
  208. depends_on:
  209. - rabbitmq01
  210. volumes:
  211. - ./rabbitmq/mq2/data:/var/lib/rabbitmq
  212. - ./rabbitmq/mq2/conf:/etc/rabbitmq
  213. command: bash -c "sleep 10; rabbitmq-server;"
  214. networks:
  215. caseor_bridge:
  216. ipv4_address: 172.0.10.12
  217. rabbitmq03:
  218. image: rabbitmq
  219. container_name: rabbitmq03
  220. hostname: rabbitmq03
  221. environment:
  222. - TZ=Asia/Shanghai
  223. - RABBITMQ_DEFAULT_USER=root #自定义登录账号
  224. - RABBITMQ_DEFAULT_PASS=123456 #自定义登录密码
  225. - RABBITMQ_ERLANG_COOKIE='secret_cookie'
  226. ports:
  227. - "15674:15672"
  228. - "5674:5672"
  229. depends_on:
  230. - rabbitmq01
  231. volumes:
  232. - ./rabbitmq/mq3/data:/var/lib/rabbitmq
  233. - ./rabbitmq/mq3/conf:/etc/rabbitmq
  234. command: bash -c "sleep 10; rabbitmq-server;"
  235. networks:
  236. caseor_bridge:
  237. ipv4_address: 172.0.10.13
  238. # 开启web管理
  239. # rabbitmq-plugins enable rabbitmq_management
  240. # # 加入rabbitmq集群
  241. # # rabbit1
  242. # rabbitmqctl stop_app
  243. # rabbitmqctl reset
  244. # rabbitmqctl start_app
  245. # # rabbit2
  246. # rabbitmqctl stop_app
  247. # rabbitmqctl reset
  248. # rabbitmqctl join_cluster --ram rabbit@rabbit1
  249. # rabbitmqctl start_app
  250. # # rabbit3
  251. # rabbitmqctl stop_app
  252. # rabbitmqctl reset
  253. # rabbitmqctl join_cluster --ram rabbit@rabbit1
  254. # rabbitmqctl start_app
View Code

使用docker启动mysql

  1. mysql:
  2. container_name: mysql
  3. image: mysql
  4. privileged: true
  5. command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --max_connections=2000 --max_allowed_packet=64M
  6. environment:
  7. - TZ=Asia/Shanghai
  8. - MYSQL_ROOT_PASSWORD=123456
  9. volumes:
  10. - ./mysql:/var/lib/mysql
  11. ports:
  12. - "3306:3306"
  13. healthcheck:
  14. test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
  15. interval: 5s
  16. timeout: 10s
  17. retries: 10
  18. networks:
  19. caseor_bridge:
  20. ipv4_address: 172.0.10.3
View Code

在数据库创建nacos数据库

  1. https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/nacos-db.sql

准备三个nacos

  1. nacos1:
  2. container_name: nacos1
  3. hostname: nacos1
  4. image: nacos/nacos-server
  5. environment:
  6. - MODE=cluster
  7. - PREFER_HOST_MODE=hostname
  8. - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
  9. - SPRING_DATASOURCE_PLATFORM=mysql
  10. - MYSQL_SERVICE_HOST=172.0.10.3
  11. - MYSQL_SERVICE_PORT=3306
  12. - MYSQL_SERVICE_USER=root
  13. - MYSQL_SERVICE_PASSWORD=123456
  14. - MYSQL_SERVICE_DB_NAME=nacos
  15. - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
  16. - JVM_XMS=128m
  17. - JVM_XMX=128m
  18. - JVM_XMN=128m
  19. volumes:
  20. - ./nacos/cluster-logs/nacos1:/home/nacos/logs
  21. - ./nacos/init.d:/home/nacos/init.d
  22. ports:
  23. - 8850:8848
  24. - 7850:7848
  25. - 9870:9848
  26. - 9852:9849
  27. depends_on:
  28. - mysql
  29. networks:
  30. caseor_bridge:
  31. ipv4_address: 172.0.10.5
  32. nacos2:
  33. container_name: nacos2
  34. hostname: nacos2
  35. image: nacos/nacos-server
  36. environment:
  37. - MODE=cluster
  38. - PREFER_HOST_MODE=hostname
  39. - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
  40. - SPRING_DATASOURCE_PLATFORM=mysql
  41. - MYSQL_SERVICE_HOST=172.0.10.3
  42. - MYSQL_SERVICE_PORT=3306
  43. - MYSQL_SERVICE_USER=root
  44. - MYSQL_SERVICE_PASSWORD=123456
  45. - MYSQL_SERVICE_DB_NAME=nacos
  46. - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
  47. - JVM_XMS=128m
  48. - JVM_XMX=128m
  49. - JVM_XMN=128m
  50. volumes:
  51. - ./nacos/cluster-logs/nacos2:/home/nacos/logs
  52. - ./nacos/init.d:/home/nacos/init.d
  53. ports:
  54. - 8849:8848
  55. - 7849:7848
  56. - 9869:9848
  57. - 9851:9849
  58. depends_on:
  59. - mysql
  60. networks:
  61. caseor_bridge:
  62. ipv4_address: 172.0.10.6
  63. nacos3:
  64. container_name: nacos3
  65. hostname: nacos3
  66. image: nacos/nacos-server
  67. environment:
  68. - MODE=cluster
  69. - PREFER_HOST_MODE=hostname
  70. - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
  71. - SPRING_DATASOURCE_PLATFORM=mysql
  72. - MYSQL_SERVICE_HOST=172.0.10.3
  73. - MYSQL_SERVICE_PORT=3306
  74. - MYSQL_SERVICE_USER=root
  75. - MYSQL_SERVICE_PASSWORD=123456
  76. - MYSQL_SERVICE_DB_NAME=nacos
  77. - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
  78. - JVM_XMS=128m
  79. - JVM_XMX=128m
  80. - JVM_XMN=128m
  81. volumes:
  82. - ./nacos/cluster-logs/nacos3:/home/nacos/logs
  83. - ./nacos/init.d:/home/nacos/init.d
  84. ports:
  85. - 8848:8848
  86. - 7848:7848
  87. - 9848:9848
  88. - 9849:9849
  89. depends_on:
  90. - mysql
  91. networks:
  92. caseor_bridge:
  93. ipv4_address: 172.0.10.7

具体配置可以参考官网

查看nacos 控制台 http://127.0.0.1:8848/nacos/http://127.0.0.1:8849/nacos/http://127.0.0.1:8850/nacos/

 可以看到集群已经搭建完成了

在.net core中使用nacos

https://github.com/nacos-group/nacos-sdk-csharp

  1. nacos-sdk-csharp.AspNetCore
  2. nacos-sdk-csharp.Extensions.Configuration

在appsettings.json中新增Nacos配置

  1. "Nacos": {
  2. "ServerAddresses": [ "http://192.168.110.39:8848" ],
  3. //命名空间GUID,public默认没有
  4. "Namespace": "779857e5-b517-437c-9026-f04c98d4bac1",
  5. // 配置中心
  6. "Listeners": [
  7. {
  8. "Group": "DEFAULT_GROUP",
  9. "DataId": "appsettings.json",
  10. "Optional": false
  11. }
  12. ],
  13. // 服务发现
  14. "ServiceName": "saas-system",
  15. "GroupName": "DEFAULT_GROUP"
  16. }

 在program下新增

  1. //读取nacos配置文件
  2. builder.Host.UseNacosConfig("Nacos");
  3. //注册服务到nacos
  4. builder.Services.AddNacosAspNet(builder.Configuration, "Nacos");

在program下继续读取appsettings的配置信息,首选需要在nacos上的appsettings配置信息

 

 启动该服务

  1. dotnet run --urls=http://*:8083
  2. dotnet run --urls=http://*:8084
  3. dotnet run --urls=http://*:8085

 

 在其他服务中调用当前服务接口

  1. [HttpGet("nacos.test")]
  2. public async Task<IActionResult> TestNacos()
  3. {
  4. var instance= await _namingService.SelectOneHealthyInstance("saas-system", "DEFAULT_GROUP");
  5. var host = $"{instance.Ip}:{instance.Port}";
  6. var baseUrl = instance.Metadata.TryGetValue("secure", out _)
  7. ? $"https://{host}"
  8. : $"http://{host}";
  9. var url = $"{baseUrl}/system/tenant.package.query.list";
  10. using HttpClient client = new();
  11. var result = await client.GetAsync(url);
  12. return Ok(await result.Content.ReadAsStringAsync());
  13. }

 

原文链接:https://www.cnblogs.com/AsprosL/p/18021312

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号