Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。
系列目录:
本系列分为项目集成、项目部署、架构演进三个方向,后续会根据情况调整文章目录。
本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单。
Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关。
Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET(C#)编程语言项目集成:应用中心。
Taurus.MVC 微服务框架 入门开发教程:项目集成:3、客户端:其它编程语言项目集成:应用中心。
Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。
Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。
Taurus.MVC 微服务框架 入门开发教程:项目部署:2、微服务应用程序Docker部署实现多开。
Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序发布到Docker部署(上)。
Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(下)。
Taurus.MVC 微服务框架 入门开发教程:项目部署:5、微服务应用程序版本升级。
Taurus.MVC 微服务框架 入门开发教程:项目部署:6、让Kestrel支持绑定多个域名转发。
Taurus.MVC 微服务框架 入门开发教程:架构演进:1、从单应用程序简单过渡到负载均衡。
Taurus.MVC 微服务框架 入门开发教程:架构演进:2、负载均到模块拆分负载。
Taurus.MVC 微服务框架 入门开发教程:架构演进:3、模块拆分负载到多级负载均衡。
前言:
最近在写相关微服务教程时发现,要构建负载均衡,如果不做点其它处理:
对于同一台主机而言上的ASP.NET Core 应用程序而言,需要通过复制程序,才能运行多份应用运行。
对于ASP.NET Core发布的项目:
- 1、默认是绑定约定好的端口,因此程序无法多开。
- 2、将绑定端口设置为0,即随机端口,让程序允许多开。
不过仅是多开,还不够。
因为对于微服务程序,需要在程序启动时,自动将自身的访问地址告诉注册中心。
默认的随机端口,无法知晓自己的运行地址,便无法发送到注册中心去。
因此,需要提前获知运行的地址(给MicroService.App.RunUrl赋值,便于发送到注册中心)。
通过小小思考,可以先获取随机可用端口,再指定该端口,即可解决这个个问题。
下面看具体的实现:
1、修改配置文件,使用随机端口:
这里设置启动端口号,和绑定的端口号都为0,0即随机。
注册中心地址是固定的,因此直接写。
- {
- "AppSettings": {
- "MicroService.Client.Name": "*",//注册所有模块
- "MicroService.Client.RegUrl": "http://192.168.188.95:9999",//注册中心的地址,这是固定的
- "MicroService.App.RunUrl": "http://localhost:0",//设置当前运行的访问地址的随机端口0,代码运行时再替换该值
- "Host": "http://*:0"//监听端口为随机,代码运行时再替换该值
- }
- }
接下来,需要在启动程序里,把0这个随机端口提前修改为可用端口,并做端口替换。
2、修改启动代码:.NET5、NET6、NET7...系列的:Program.cs
- using Microsoft.AspNetCore.Server.Kestrel.Core;
- using System.Net;
- using System.Net.Sockets;
- var builder = WebApplication.CreateBuilder(args);
- string host = CYQ.Data.AppConfig.GetApp("Host");
- string runUrl = Taurus.Core.MicroService.Config.AppRunUrl;
- if (host.Contains(":0"))//随机端口
- {
- TcpListener tl = new TcpListener(IPAddress.Any, 0);
- tl.Start();
- int port = ((IPEndPoint)tl.LocalEndpoint).Port;//获取随机可用端口
- tl.Stop();
- host = host.Replace(":0", ":" + port);//替换监听端口号
- if (runUrl.Contains(":0"))
- {
- Taurus.Core.MicroService.Config.AppRunUrl = runUrl.Replace(":0", ":" + port);//替换设置启动路径的端口号
- }
- }
- builder.WebHost.UseUrls(host);
- builder.Services.AddHttpContext();
- builder.Services.Configure<KestrelServerOptions>(x => x.AllowSynchronousIO = true).Configure<IISServerOptions>(x => x.AllowSynchronousIO = true);
- var app = builder.Build();
- app.UseHttpContext();
- app.UseTaurusMvc(app.Environment);
- app.Run();
这里,先产生可用的监听端口,再用这个端口号赋值后再监听。
3、修改启动代码:ASP.NET Core 2.N到3.N系列:Program.cs
代码是一样的:
- using System;
- using Microsoft.AspNetCore;
- using Microsoft.AspNetCore.Hosting;
- using CYQ.Data;
- using System.Net.Sockets;
- using System.Net;
- using Taurus.Core;
- namespace Taurus.View
- {
- public class Program
- {
- public static void Main(string[] args)
- {
- BuildWebHost(args).Run();
- }
- public static IWebHost BuildWebHost(string[] args) =>
- WebHost.CreateDefaultBuilder(args)
- .UseStartup<Startup>()
- .UseUrls(GetUrl())
- .Build();
- public static string GetUrl()
- {
- string host = AppConfig.GetApp("Host");
- string runUrl = MicroService.Config.AppRunUrl;
- if (host.Contains(":0"))//随机端口
- {
- TcpListener tl = new TcpListener(IPAddress.Any, 0);
- tl.Start();
- int port = ((IPEndPoint)tl.LocalEndpoint).Port;//获取随机可用端口
- tl.Stop();
- host = host.Replace(":0", ":" + port);
- if (runUrl.Contains(":0"))
- {
- MicroService.Config.AppRunUrl = runUrl.Replace(":0", ":" + port);//设置启动路径
- }
- }
- return host;
- }
- }
- }
4、修改启动代码:再优化一下,实现跨主机:
在上面的配置中:
- "MicroService.App.RunUrl": "http://localhost:0",//设置当前运行的访问地址的随机端口0,代码运行时再替换该值
如果指定了localhost,默认情况下,仅适合单主机运行,无法跨主机直接运行。
因此,代码可以再优化一下,把localhost替换成本机局域网IP:
- public static string GetUrl()
- {
- string host = AppConfig.GetApp("Host");
- string runUrl = MicroService.Config.AppRunUrl;
- if (host.Contains(":0"))//随机端口
- {
- TcpListener tl = new TcpListener(IPAddress.Any, 0);
- tl.Start();
- int port = ((IPEndPoint)tl.LocalEndpoint).Port;//获取随机可用端口
- tl.Stop();
- host = host.Replace(":0", ":" + port);
- if (runUrl.Contains(":0"))
- {
- runUrl = runUrl.Replace(":0", ":" + port);//替换启动路径
- }
- if (runUrl.Contains("localhost"))//替换成内网IP
- {
- System.Net.IPAddress[] addressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
- foreach (var address in addressList)
- {
- if (!address.ToString().Contains(":"))
- {
- runUrl = runUrl.Replace("localhost", address.ToString());//替换启动路径
- break;
- }
- }
- }
- MicroService.Config.AppRunUrl = runUrl;
- }
- return host;
- }
总结:
通过以上配置,发布后的应用程序,可以在任何主机上实现多开N次,就可以增加N个节点。
随时随地实现节点的动态新增扩容。
Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。的更多相关文章
- Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目集成:应用中心。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:5、微服务应用程序发布到Docker部署(下)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:6、微服务应用程序Docker部署实现多开。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
随机推荐
- 阿里巴巴开源限流组件Sentinel初探
1 Sentinel主页 https://github.com/alibaba/Sentinel/wiki/主页 1.1 Sentinel介绍 随着微服务的流行,服务和服务之间的稳定性变得越来越重要. ...
- 深度学习与CV教程(13) | 目标检测 (SSD,YOLO系列)
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
- 超级重磅!Apache Hudi多模索引对查询优化高达30倍
与许多其他事务数据系统一样,索引一直是 Apache Hudi 不可或缺的一部分,并且与普通表格式抽象不同. 在这篇博客中,我们讨论了我们如何重新构想索引并在 Apache Hudi 0.11.0 版 ...
- 【Java面试】Mybatis中#{}和${}的区别是什么?
一个工作2年的粉丝,被问到一个Mybatis里面的基础问题. 他跑过来调戏我,说Mic老师,你要是能把这个问题回答到一定高度,请我和一个月奶茶. 这个问题是: "Mybatis里面#{}和$ ...
- 物联网微消息队列MQTT介绍-EMQX集群搭建以及与SpringBoot整合
项目全部代码地址:https://github.com/Tom-shushu/work-study.git (mqtt-emqt 项目) 先看我们最后实现的一个效果 1.手机端向主题 topic111 ...
- numpy学习笔记 01
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. NumPy 是一个运行速度非常快的数学库 ...
- pyenv安装及使用教程
pyenv安装及使用教程 pyenv 安装 git clone https://github.com/pyenv/pyenv.git ~/.pyenv # 编辑 bashrc vim ~/.bashr ...
- 重学ES系列之模版字符串
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- dubbox、zookeeper BUG记录
主要错误信息: dubbo:com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method... Caused by: com.alib ...
- 不要让Microsoft edge 打开IE浏览器的设置(兼容性问题)
1打开Microsoft edge 2 打开设置 3 搜索栏搜索IE,打开即可