码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Taurus.MVC 微服务框架 入门开发教程:项目部署:6、微服务应用程序Docker部署实现多开。


    系列目录:

    本系列分为项目集成、项目部署、架构演进三个方向,后续会根据情况调整文章目录。

    开源地址:https://github.com/cyq1162/Taurus.MVC

    本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单。

    Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。

    Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目集成:应用中心。

    Taurus.MVC 微服务框架 入门开发教程:项目集成:3、客户端:其它编程语言项目集成:Java集成应用中心。

    Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。

    Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。

    Taurus.MVC 微服务框架 入门开发教程:项目集成:6、微服务间的调用方式:Rpc.StartTaskAsync。

    Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。

    Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。

    Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。

    Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。

    Taurus.MVC 微服务框架 入门开发教程:项目部署:5、微服务应用程序发布到Docker部署(下)。

    Taurus.MVC 微服务框架 入门开发教程:项目部署:6、微服务应用程序Docker部署实现多开。

    Taurus.MVC 微服务框架 入门开发教程:项目部署:7、微服务节点的监控。

    Taurus.MVC 微服务框架 入门开发教程:架构演进:1、从单应用程序简单过渡到负载均衡。

    Taurus.MVC 微服务框架 入门开发教程:架构演进:2、负载均到模块拆分负载。

    Taurus.MVC 微服务框架 入门开发教程:架构演进:3、模块拆分负载到多级负载均衡。

    Taurus.MVC 微服务框架 入门开发教程:运行示例:https://github.com/cyq1162/Taurus.MVC.MicroService.Demo

    前言:

    对于Taurus.MVC 微服务应用程序而言,程序需要在启动时,将自身的可访问地址告诉注册中心。

    而通过Docker发布时,其访问路径(IP)或端口(被映射)改变了,而且是后期在部署时才变化的。

    那如果在程序启动之时,就获知自身的可访问地址呢?

    在:Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。一文中,

    通过本地的配置随机端口,实现节点的多开。

    但对于部署到Docker中的而言,走的是镜像的端口映射,因此,情况有所不同。

    好在,发现Docker可以在增加节点时设置环境变量。

    因此,可将映射后的地址或端口,通过环境变量注射进来,在应用程序中预先读取即可。

    下面是经过优化,同时兼容两者的示例代码:

    1、Net5、NET6、NET7....系列:Program.cs

    复制代码
    using CYQ.Data;
    using Microsoft.AspNetCore.Server.Kestrel.Core;
    using System.Net;
    using System.Net.Sockets;
    using Taurus.Core;
    
    var builder = WebApplication.CreateBuilder(args);
    
    builder.WebHost.UseUrls(host);
    builder.Services.AddHttpContext();
    builder.Services.Configure(x => x.AllowSynchronousIO = true).Configure(x => x.AllowSynchronousIO = true);
    
    var app = builder.Build();
    app.UseHttpContext();
    app.UseTaurusMvc(app.Environment);
    app.Run();
    复制代码

     

    2、ASP.NET 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;
    using System.Net.Http;
    
    namespace Taurus.View
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                try
                {
                    BuildWebHost(args).Run();
                }
                catch (Exception err)
                {
                    Console.WriteLine(err.Message);
                    Console.Read();
                }
            }
    
            public static IWebHost BuildWebHost(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup()
                    .UseUrls(MvcConfig.Kestrel.Urls)
                    .Build();
           
        }
    }
    复制代码

    [PS:之前很多代码,后续版本都全封装起来了,只剩下上面红色的配置属性。]

    后续,可以创建增映像的容器时,补上环境变量即可,如图:

      

    这里的环境变量名称也调整为:RunUrl

    RunUrl 配置值为:http://ip:port

     

     也可以通过命令行创建容器时,添加环境变量:

    docker run -d -p 8001:80 --name=my8001 ---env dockport=8001 regcenter   //创建容器,容器外对运行端口是8001

    添加多个环境变量:

    docker run -d -p 8001:80 --name=my8001 ---env dockhost=192.168.1.88 ---env dockport=8001 regcenter   //创建容器,容器外对运行端口是8001

    总结:

    对于微服务应用程序,需要做的,就是将自身的运行地址,在程序启动之初,就发送到注册中心。

    而内部启动时候核心即时读取:MicroService.Config.AppRunUrl 这个属性,其值需要在发送之前设置好即可。

     

  • 相关阅读:
    c语言练习65:写一个程序拷贝文件
    [附源码]计算机毕业设计JAVAjsp在线视频网站
    【扩展阅读之编译和解释语言的区别】
    Java中restTemplate的使用
    A1. Prefix Flip (Easy Version)
    kube-bench-CIS基准的自动化扫描工具学习
    SEO中的内容在自相残杀?一探关键词蚕食的真相
    【MATLAB的方程组求解】
    css实现进度条
    【vue3】06. 跟着官网学习vue3
  • 原文地址:https://www.cnblogs.com/cyq1162/p/16554468.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号