码农知识堂 - 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 这个属性,其值需要在发送之前设置好即可。

     

  • 相关阅读:
    python sklearn 绁炵粡缃戠粶,sklearn 绁炵粡缃戠粶
    linux开发之制作Ubuntu根文件系统
    Bean的作用域和生命周期
    springboot整合quartz实现任务持久化(下)
    React+TS前台项目实战(六)-- 全局常用组件Button封装
    Linux学习笔记8
    元器件贸易企业,理应“以快制胜”
    ESP8266-Arduino编程实例-ML8511紫外线(UV)传感器驱动
    第2章 变量和简单数据类型
    依赖注入的进阶:深度解析ApplicationContextAware
  • 原文地址:https://www.cnblogs.com/cyq1162/p/16554468.html
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号