asp.net core系列 76 Apollo 快速安装模式下填坑和ASP.NetCore结合使用
前言:由于公司占时没有运维,出于微服务的需要,Apollo只能先装在windows 阿里云上跑起来,由于环境及网络等问题,在安装过程中遇到很多坑,算是一个个坑填完后,最终实现。
一. java jdk环境
java jdk 1.8下载地址: https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
建议JDK安装目录不要带有中文、【空格】、特殊符号等,例如:Program Files 这种会导致使用Quick Start 里面的./demo.sh start出错,会提示【/c/Program: No such file or directory】 就是因为空格的问题
java jdk官方下载包时需要登录, 我的用户名为:邮箱,密码:Hsr123456。安装jdk时选择目录如下:
安装后,配置环境变量,查看版本信息:
二.mysql 环境
2.1 安装mysql 5.7及以上
2.2 创建ApolloPortalDB 数据库
sql文件在apollo-build-scripts-master包中,该包下载看第三节。
导入命令如下所示:
导入成功后,可以通过执行以下sql语句来验证
2.3 创建ApolloConfigDB数据库
导入命令如下所示:
导入成功后,可以通过执行以下sql语句来验证:
2.4 配置数据库连接信息
需要编辑修改demo.sh(看第三节),修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息。
三. 下载快速启动包
apollo下载地址:https://github.com/nobodyiam/apollo-build-scripts 有58M下载有些慢
配置demo.sh文件内容中的mysql连接设置
- # apollo config db info
- apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
- apollo_config_db_username=root
- apollo_config_db_password=
- # apollo portal db info
- apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
- apollo_portal_db_username=root
- apollo_portal_db_password=
四. Quick-Start 启动Apollo配置中心
下载git bash, 需要bash环境,下载地址: https://gitforwindows.org/, 安装后默认路径在C:\Users\Administrator下,在bush中使用ls查看文件
将apollo-build-scripts-master目录移到C:\Users\Administrator下
启动apolloQuick Start脚本会在本地启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用。启动功能如下所示:
如果启动失败,查看service/apollo-service.log 或 portal/apollo-portal.log日志进一步分析, 操作系统重启后,需要再打开git bush手动启用demo.sh文件。
启动成功后访问http://localhost:8070/signin 输入用户名apollo,密码admin后登录
配置二个app项目如下所示:
五. asp.net core的客户端使用
asp.net core系列 73 Exceptionless+Nlog以及Apollo介绍有介绍。几个重要的环节是:
1.配置appsettings.json
- {
- "Logging": {
- "LogLevel": {
- "Default": "Warning"
- }
- },
- "apollo": {
- "AppId": "SearchService",
- "MetaServer": "http://192.168.2.211:8080/",
- "Env": "Dev",
- "Meta": {
- "DEV": "http://192.168.2.211:8080/"
- }
- }
- }
2.添加引用
- Install-Package Microsoft.Extensions.Configuration -Version 2.2.
- Install-Package Com.Ctrip.Framework.Apollo.Configuration -Version 2.0.
3.Program.cs 配置
- public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
- WebHost.CreateDefaultBuilder(args)
- .ConfigureAppConfiguration(builder=>builder
- .AddApollo(builder.Build().GetSection("apollo"))
- //.AddNamespace("")
- .AddDefault())
- .UseStartup<Startup>();
4.本地缓存
Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。
本地缓存路径位于C:\opt\data\{appId}\config-cache
,所以请确保C:\opt\data\
目录存在,且应用有读写权限
5. ValuesController 使用
- public ValuesController(IConfiguration configuration)
- {
- _configuration = configuration;
- string mysqlConn = _configuration.GetSection("mysql").Value;
- }
6. 添加的项目如下所示:
7. 动态修改配置参数
在apollo项目中将mysql的端口修改为3309,点击发布, 在asp.net core 启动项目中刷新页面。获取的配置已动态变化,无需重启asp.net core项目,如下所示:
- [HttpGet]
- public ActionResult<IEnumerable<string>> Get()
- {
- string mysqlConn = _configuration.GetSection("mysql").Value;
- return new string[] { mysqlConn};
- }
.net core配置参考:https://github.com/ctripcorp/apollo.net/blob/dotnet-core/Apollo.Configuration/README.md
六.生产环境遇到的问题
在windows服务器部署apollo,使用gitbush来启动demo.sh文件时,总是失败,也没有service/apollo-service.log日志文件,这样很难排查问题。验证处理如下:
1. 在安装的gitbush目标下,打开gitbush的 git-bash.exe文件来启动。我服务器目录是:E:\GitBush\git-bash.exe。
2. 在Demo.sh文件中除了配置mysql,其它都不要修改。
3. 在环境变量中有另一个java环境,去掉如下:C:\Program Files (x86)\Common Files\Oracle\Java\javapath,增加E:\java\jdk1.8.0_241\bin,在重启打开git-bash.exe文件来启动。 反复测试是这个问题导致
- -- 修改部门,
- USE apolloportaldb;
- SELECT * FROM serverconfig WHERE id=;
- UPDATE serverconfig SET `Value`='[{"orgId":"TEST1","orgName":"样例部门1"},{"orgId":"TEST2","orgName":"yla520"}]' WHERE id=
- -- 在gitbush中停止服务 再启动
- $ /e/apollo-build-scripts-MASTER/demo.sh STOP
- $ /e/apollo-build-scripts-MASTER/demo.sh START
4. 最重要一点
由于服务器在阿里云上,启动apollo后通过访问http://localhost:8080/,会发现eureka 下面的instance info是走的内网ip。这样一来非局域网的.net客户端就无法访问到配置文件。
目前的一个解决方法是在服务器操作系统上,添加环境变量,变量值为阿里云公开的ip地址,如下所示:
这样apollo关闭再启动后,再次访问http://localhost:8080/,会发现eureka 下面的instance info是走的公网ip
参考:快速启动
asp.net core系列 76 Apollo 快速安装模式下填坑和ASP.NetCore结合使用的更多相关文章
- (30)ASP.NET Core3.1 集成Apollo快速安装与使用
1.介绍 Apollo(阿波罗)是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用 ...
- 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)
黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...
- 【目录】asp.net core系列篇
随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...
- asp.net core系列 40 Web 应用MVC 介绍与详细示例
一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...
- asp.net core系列 30 EF管理数据库架构--必备知识 迁移
一.管理数据库架构概述 EF Core 提供两种主要方法来保持 EF Core 模型和数据库架构同步.一是以 EF Core 模型为基准,二是以数据库为基准. (1)如果希望以 EF Core 模型为 ...
- asp.net core系列 39 Web 应用Razor 介绍与详细示例
一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor. 这样开发Web包括了MVC框架和Razor框架.对于Razor来说 ...
- asp.net core系列 36 WebAPI 搭建详细示例
一.概述 HTTP不仅仅用于提供网页.HTTP也是构建公开服务和数据的API强大平台.HTTP简单灵活且无处不在.几乎任何你能想到的平台都有一个HTTP库,因此HTTP服务可以覆盖广泛的客户端,包括浏 ...
- asp.net core 系列 18 web服务器实现
一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
随机推荐
- JDBC连接到数据库查询打印数据
通过一天的视频学习,认识了jdbc的连接原理前来小结: 游标读取数据库表的行一次读取一个,getXxx()方法读取表的列一个数据 next()方法可以让游标下移 可以把数据库的表看做是一个类,每条记录 ...
- Leetcode 412.FizzBuzz
题目描述 写一个程序,输出从 1 到 n 数字的字符串表示. 1. 如果 n 是3的倍数,输出"Fizz": 2. 如果 n 是5的倍数,输出"Buzz": 3 ...
- LLDB奇巧淫技
打印视图层级 这个相信很多人都会了,是ta是ta就是ta recursiveDescription 用法大概就是如下 123 po [self.view recursiveDescription] p ...
- List.remove()的使用注意
不使用forEach的循环 使用forEach循环 参考 今天修改一个bug,需要取一个List和一个Set的交集,使用了双重循环.想着提高循环效率,每加入一个交集中的元素,就将List中的元素删除, ...
- DDL库和表的管理
库和表的管理 一. 库的管理 /* 语法: create database [if not exists]库名; */ #.创建库Books CREATE DATABASE IF NOT EXISTS ...
- Mongodb 对于Sort排序能够支持的最大内存限制查看和修改
MongoDB Server对于Sort排序能够支持的最大内存限制查看: > use admin switched to db admin >db.runCommand({ getPara ...
- Murata村田研发向左,制造向右
前言:Murata村田自1944 年在日本京都创立,是陶瓷无源电子元件.无线连接模块和电源转换技术产品设计和制造领域的全球领导者. Murata 一直在为社会的进步和电子行业的革命贡献自己的力量. 在 ...
- 20170813-CSRF 跨站请求伪造
CSRF CSRF是Cross Site Request Forgery的缩写,翻译过来就是跨站请求伪造. 跨站:顾名思义,就是从一个网站到另一个网站. 请求:即HTTP请求. 伪造:在这里可以理解为 ...
- grid实战之微信钱包 腾讯服务界面
网格布局简介 CSS3网格布局是让开发人员设计一个网格并将内容放在这些网格内.而不是使用浮动制作一个网格,实际上是你将一个元素声明为一个网格容器,并把元素内容置于网格中. 有一些浏览器是不支持网格布局 ...
- CSS+DIV自适应布局
CSS+DIV自适应布局 1.两列布局(左右两侧,左侧固定宽度200px;右侧自适应占满) 代码如下: <!doctype html> <html> <head> ...