Appllo学习

news2025/1/5 12:17:49

补充学习:

Apollo管理多环境下的配置和踩坑实践 - 简书

 Apollo-阿波罗配置中心超详细教程_apllo-CSDN博客 

springboot本地local配置覆盖远程Apollo配置(含Apollo配置加载顺序说明)_本地覆盖apollo配置-CSDN博客

Apollo 配置中心详细教程 - 简书 (包含简单的用法 挺好)

SpringBoot 集成 Apollo 配置中心,一文搞定!(万字长文)-阿里云开发者社区 (最全面的配置了)

----------- 

Apollo配置中心教程、详解-CSDN博客

术语说明:

application (应用)

Apollo是以应用(项目)为单位的,一个应用就是一个独立的个体,这个个体很好理解,就是实际使用配置的应用,Apollo客户端在运行时需要知道当前应用是谁,从而可以去获取对应的配置。

关键字:appId

environment (环境)
配置对应的环境,Apollo客户端在运行时需要知道当前应用处于哪个环境,从而可以去获取相应的配置,一个应用可能有多个环境,每个环境的配置可能有些地方不一样。

关键字:env

cluster (集群)
一个应用下不同实例的分组,比如典型的可以按照数据中心分,把上海机房的应用实例分为一个集群,把北京机房的应用实例分为另一个集群。

关键字:cluster

namespace (命名空间)
一个应用下不同配置的分组,可以简单地把namespace类比为文件,不同类型的配置存放在不同的文件中,如数据库配置文件,RPC配置文件,应用自身的配置文件等

关键字:namespaces(C++头文件经常导入这玩意)

重点是一个应用下,意思是一个应用可以有多个命名空间,说白了就是填写配置的地方,没什么高端的。就是让你不把所有配置写在同一块区域,到时候自己找的时候也麻烦。

例如:MySQL的配置用一个空间,redis的配置又用另一个,你可以随意分配

另一个作用
命名空间可以分为公共的和私有的,私有的就是只能你这个应用看到,别的应用看不到,公共的就是所有的应用都能看到你这个空间里面的配置,并且所有的应用都可以引用这个空间(就是将空间弄到自己的应用中来)。

我们往往会创建一个应用,专门用来设置公共的配置,然后其他应用继承这个空间就行了,这样做的好处是:各个应用相同的配置就不需要重复配置了,也可以统一更改

 

如图有两个集群,一个default,default有两个命名空间 别用True,应该是true小写的(语法)

Apollo的总体设计,从下往上看:


Config Service(8080端口)提供配置的读取、推送等功能,服务对象是Apollo客户端,就是你自己写的代码,你自己的项目就从这里拿到配置信息

Admin Service(8070端口)提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面),就是快速启动的那个操作界面

Eureka提供服务注册和发现,为了简单起见,目前Eureka在部署时和Config Service是在一个JVM进程中的,他俩就是在同一个项目中(快速启动的三个服务,就是三个boot项目)(8090端口)

Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳

springboot项目里面只需要配置Apollo的一些信息:

 springboot执行web项目的时候,如果使用了Apollo配置中心,会先去配置中心中读取配置,再启动的 

appId(读取哪个应用中的配置)

namespace(应用中的哪些命名空间)

meta-server(meta的地址,在哪个ip和端口读取配置)

在 Apollo 的配置中,apollo.meta 是用来指定 ConfigService 服务地址 的一个关键参数。具体解释如下:

1. meta 的作用

apollo.meta 指定的是 Apollo 配置中心的 ConfigService 服务端点
客户端通过这个地址与服务端通信,以拉取配置数据或监听配置的实时更新。

2. 为什么需要 apollo.meta

Apollo 的服务端通常有多个组件(ConfigService、AdminService 等)。其中,ConfigService 是负责提供配置读取和推送服务的核心组件。
客户端需要知道 ConfigService 的地址才能正常运行,否则无法获取配置。

3. 常见场景

  • 开发环境:通常会使用本地服务,像 http://127.0.0.1(loacalhost):8080。(因为从官网下载下来就是默认ConfigService 的地址是这个了好像)
  • 测试/生产环境:需要指定实际的服务地址,例如 http://configservice.mycompany.com:8080

apollo.meta 就是用来告诉 Apollo 客户端(我们的代码),服务端的 配置服务地址 是什么。 

4. 多环境支持

在复杂的环境中,你可以为不同的环境配置不同的 apollo.meta 值。例如:

# 开发环境 apollo.meta=http://dev-configservice.company.com:8080

# 测试环境 apollo.meta=http://test-configservice.company.com:8080

# 生产环境 apollo.meta=http://prod-configservice.company.com:8080

环境(读取哪个环境的配置:开发、测试、生产)

在Java程序启动脚本中,可以指定-Denv=YOUR-ENVIRONMENT

Idea中为java程序添加启动参数(含:VM options、Program arguments、Environment variable)_idea启动配置java启动参数-CSDN博客

还可以通过操作系统的System Environment ENV来指定

通过配置文件来指定env=YOUR-ENVIRONMENT;(windows C:\opt\settings\server.properties)(linux /opt/settings/server.properties)

集群(哪个集群的配制)

在Java程序启动脚本中,可以指定-Dapollo.cluster=SomeCluster

过Spring Boot的配置文件,apollo.cluster=SomeCluster

可以在server.properties配置文件中指定idc=xxx

 例子1:

package Apollo;
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
/**
 * 功能:
 * 作者:IT伟
 * 日期:2025/1/2 22:59
 */
public class getConfigTest {
    public static void main(String[] args) {
        getConfigQuickStart();
        getConfigFromNameSpace();
    }

    //获取默认命名空间的配置(application)
    public static void getConfigQuickStart() {
        Config appConfig = ConfigService.getAppConfig();
        String property = appConfig.getProperty("sms.enable", null);
        System.out.println("sms.enable的值是:" + property);
    }

    //获取自定义命名空间的参数
    public static void getConfigFromNameSpace() {
        Config config = ConfigService.getConfig("micro_service.test-namespace");
        String port = config.getProperty("server.port", null);
        System.out.println(port);
        Config config2 = ConfigService.getConfig("application");
        String port2 = config2.getProperty("server.port", null);
        System.out.println(port2);
    }

}

运行: 

 结果:

  

 复现链接中例子:

启动springbootaplication才会加载application.xx配置文件

@org.springframework.boot.autoconfigure.SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class} )//@EnableAutoConfiguration @ComponentScan

@ComponentScan(basePackages = {"Apollo"})
public class SpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootApplication.class, args);
    }
}

没有springbootapplication报错 


            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <version>3.1.4</version> <!-- 根据你的需求调整版本 -->
            </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.7.4</version>
        </dependency>

 

不加上这部分,springboot会启动后自动关闭 

SpringBoot项目启动后自动关闭:Process finished with exit code 0_springboot process finished with exit code 0-CSDN博客

SpringBoot项目启动报错:No active profile set, falling back to default profiles:default-CSDN博客

Apollo配置中心教程、详解-CSDN博客

这个证明先加载Apollo的,所以如下图所示,我在代码里面就没有用application命名了,否则会直接加载我的server.port,导致tomcat的一直是Apollo 

这篇也很好(springboot用法更加全面):

微服务:简述微服务架构中的配置中心之Apollo_阿波罗配置中心-CSDN博客

问题:

一直没找到配置文件加载env的,后续有时间遇到在想,是否可以通过注解 

Spring Boot 整合 Apollo 配置中心实战_springboot整合apollo-CSDN博客 

配置 Apollo 客户端
在项目的 application.properties 或 application.yml 文件中添加 Apollo 相关配置:
# Apollo 配置中心地址,多个用逗号分隔
apollo.meta=http://[Apollo 服务端 IP]:8080
# 应用 ID,需与 Apollo 管理端创建的应用 ID 一致
app.id=your-app-id
# 环境,如 dev、test、prod 等
apollo.env=dev

# 集群,默认值可设为 default
apollo.cluster=default

代码解读
配置加载顺序方面,Apollo 会优先加载系统环境变量中的配置(以 APOLLO_ 开头),若未找到则读取上述配置文件内容,开发者可灵活利用这一点在不同部署场景下覆盖配置。
启用 Apollo 配置注入
在 Spring Boot 启动类上添加 @EnableApolloConfig 注解,开启 Apollo 配置自动注入功能:
                        
原文链接:https://blog.csdn.net/weixin_43896211/article/details/144437102

 

但是看这里可以配置,想不懂,而且我不需要@enableapollo注解也可以 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2270729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React18路由和Vue3路由进行对比

本文将深入比较 React 18 和 Vue 3 路由的不同之处&#xff0c;帮助你更好地理解如何在这两个框架中进行路由管理。希望能对于从 Vue 3 迁移到 React 的开发者&#xff0c;理解这些差异&#xff0c;帮助你更高效地切换框架和构建应用。 1. 路由配置 React 18 的路由配置 Rea…

Windows系统下载、部署Node.js与npm环境的方法

本文介绍在Windows电脑中&#xff0c;下载、安装并配置Node.js环境与npm包管理工具的方法。 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;其允许开发者使用JavaScript编写命令行工具和服务器端脚本。而npm&#xff08;Node Package Manager&#xff09;则…

浏览器选中文字样式

效果 学习 Chrome: 支持 ::selection。Firefox: 支持 :-moz-selection 和 ::selection。Safari: 支持 ::selection。Internet Explorer: 支持 :-ms-selection。Microsoft Edge: 支持 ::-ms-selection 和 ::selection。 代码 <!DOCTYPE html> <html lang"en&qu…

指代消解:自然语言处理中的核心任务与技术进展

目录 前言1. 指代消解的基本概念与分类1.1 回指与共指 2. 指代消解的技术方法2.1 端到端指代消解2.2 高阶推理模型2.3 基于BERT的模型 3. 事件共指消解&#xff1a;跨文档的挑战与进展3.1 联合模型3.2 语义嵌入模型&#xff08;EPASE&#xff09; 4. 应用场景与前景展望4.1 关键…

CDPHudi实战-集成spark

[一]使用Spark-shell 1-配置hudi Jar包 [rootcdp73-1 ~]# for i in $(seq 1 6); do scp /opt/software/hudi-1.0.0/packaging/hudi-spark-bundle/target/hudi-spark3.4-bundle_2.12-1.0.0.jar cdp73-$i:/opt/cloudera/parcels/CDH/lib/spark3/jars/; done hudi-spark3.4-bu…

leetcode:面试题 17.01. 不用加号的加法(python3解法)

难度&#xff1a;简单 设计一个函数把两个数字相加。不得使用 或者其他算术运算符。 示例: 输入: a 1, b 1 输出: 2 提示&#xff1a; a, b 均可能是负数或 0结果不会溢出 32 位整数 题解&#xff1a; class Solution:def add(self, a: int, b: int) -> int:sum_list [a…

设计模式 结构型 适配器模式(Adapter Pattern)与 常见技术框架应用 解析

适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将一个类的接口转换成客户端所期望的另一个接口&#xff0c;从而使原本因接口不兼容而无法一起工作的类能够协同工作。这种设计模式在软件开发中非常有用&#xff0c;尤其是在需要集成…

二维码文件在线管理系统-收费版

需求背景 如果大家想要在网上管理自己的文件&#xff0c;而且需要生成二维码&#xff0c;下面推荐【草料二维码】&#xff0c;这个系统很好。特别适合那些制造业&#xff0c;实体业的使用手册&#xff0c;你可以生成一个二维码&#xff0c;贴在设备上&#xff0c;然后这个二维码…

MySQL8安装与卸载

1.下载mysql MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/ 2.解压mysql安装包 解压到自己定义的目录&#xff0c;这里解压就是安装&#xff0c;解压后的路径不要有空格和中文。 3.配置环境变量 配置环境变量可以方便电脑在任何的路径…

数据挖掘——关联规则挖掘

数据挖掘——关联数据挖掘 关联数据挖掘关联规则关联规则挖掘问题&#xff1a;具体挖掘过程Apriori 产生关联规则 关联数据挖掘 关联分析用于发现隐藏在大型数据集中的令人感兴趣的联系&#xff0c;所发现的模式通常用关联规则或频繁项集的形式表示。 关联规则反映一个事物与…

【74HC192减法24/20/72进制】2022-5-17

缘由用74ls192设计一个72进制的减法计数器&#xff0c;需要有逻辑电路图-硬件开发-CSDN问答

Samsung手机首次主要采用竞对Micron LPDDR5内存

根据韩国媒体《韩国先驱报》&#xff08;The Korea Herald&#xff09;的报道&#xff0c;即将在1月底发布的三星 Galaxy S25 系列智能手机将首次主要使用美光科技&#xff08;Micron Technology&#xff09;提供的移动DRAM&#xff0c;而非三星自家的产品。这一消息对于三星的…

Linux驱动开发学习准备(Linux内核源码添加到工程-Workspace)

Linux内核源码添加到VsCode工程 下载Linux-4.9.88源码&#xff1a; 没有处理同名文件的压缩包&#xff1a; https://pan.baidu.com/s/1yjIBXmxG9pwP0aOhW8VAVQ?pwde9cv 已把同名文件中以大写命名的文件加上_2后缀的压缩包&#xff1a; https://pan.baidu.com/s/1RIRRUllYFn2…

leetcode题目(3)

目录 1.加一 2.二进制求和 3.x的平方根 4.爬楼梯 5.颜色分类 6.二叉树的中序遍历 1.加一 https://leetcode.cn/problems/plus-one/ class Solution { public:vector<int> plusOne(vector<int>& digits) {int n digits.size();for(int i n -1;i>0;-…

vue3+Echarts+ts实现甘特图

项目场景&#xff1a; vue3Echartsts实现甘特图;发布任务 代码实现 封装ganttEcharts.vue <template><!-- Echarts 甘特图 --><div ref"progressChart" class"w100 h100"></div> </template> <script lang"ts&qu…

接受Header使用错Map类型,导致获取到的Header值不全

问题复现 在 Spring 中解析 Header 时&#xff0c;我们在多数场合中是直接按需解析的。例如&#xff0c;我们想使用一个名为 myHeaderName 的 Header&#xff0c;我们会书写代码如下&#xff1a;RequestMapping(path "/hi", method RequestMethod.GET) public Str…

GitHub的简单操作

引言 今天开始就要开始做项目了&#xff0c;上午是要把git搭好。搭的过程中遇到好多好多的问题。下面就说一下git的简单操作流程。我们是使用的GitHub,下面也就以这个为例了 一、GitHub账号的登录注册 https://github.com/ 通过这个网址可以来到GitHub首页 点击中间绿色的S…

【时时三省】(C语言基础)常见的动态内存错误

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 对NULL指针的解引用操作 示例&#xff1a; malloc申请空间的时候它可能会失败 比如我申请一块非常大的空间 那么空间可能就会开辟失败 正常的话要写一个if&#xff08;p&#xff1d;&#x…

【51项目】51单片机自制小霸王游戏机

视频演示效果&#xff1a; 纳新作品——小霸王游戏机 目录&#xff1a; 目录 视频演示效果&#xff1a; 目录&#xff1a; 前言&#xff1a; 一、连接方式&#xff1a; 1.1 控制引脚 1.2. 显示模块 1.3. 定时器 1.4. 游戏逻辑与硬件结合 1.5. 中断处理 二、源码分析&#xff1a…

ESP32-S3遇见OpenAI:OpenAI官方发布ESP32嵌入式实时RTC SDK

目录 OpenAI RTC SDK简介应用场景详解智能家居控制系统个人健康助手教育玩具 技术亮点解析低功耗设计快速响应高精度RTC安全性保障开发者指南 最近&#xff0c;OpenAI官方发布了一款针对ESP32-S3的嵌入式实时RTC&#xff08;实时时钟&#xff09;SDK&#xff0c;这标志着ESP32-…