从0到1实现RPC | 接入Apollo配置中心

一、代码实现

  1. 添加依赖

添加apollo客户端的依赖和spring配置相关依赖

图片

  1. 添加监听器

通过实现ApplicationContextAware接口,获取Spring上下文。

使用@ApolloConfigChangeListener注解监听命名空间rpc-demo-provider.yaml和默认的application.properties。

监听逻辑是当配置中心的属性发生变化时,通过事件发布的形式更新bean的赋值。

图片

  1. 注入监听器bean

服务提供者provider和服务消费者consumer两端都需要接入配置中心。

在consumer端添加注解配置,注入bean

图片

在provider端添加注解配置,注入bean

图片

  1. 启用apollo的配置
  • 设置应用id
  • 设置meta信息,就是配置中心服务地址
  • 启动apollo
  • 设置命名空间,这里一定要写正确,和代码,配置中心保持一致

图片

二、启动Apollo配置中心

我这里使用的是云服务,直接登录使用,设置appid(midnight),添加namespace(rpc-demo-provider),新增配置。

图片

配置内容如下,表示这几个属性支持配置中心动态更新。

图片

三、测试

启动服务提供者provider

发起请求测试,获取meta属性信息,一开始tc=10。

图片

然后在apollo配置中心更新tc=11,点击发布,再次获取值就为11了。

图片

观察下日志:

meta是个hashmap,动态更新后,hashcode值发生了变化,说明产生的是个新的map。

图片

监听日志也说明tc值发生了更新,从10更新为11。

图片

源码地址:

https://github.com/midnight2104/midnight-rpc/tree/lesson13

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

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

相关文章

学习笔记-数据结构-线性表(2024-04-16)

设计一个算法判断单链表中元素是否是递增的。 设计思想:双指针操作 变量说明: head表示链表头指针 p和q表示两个用来遍历链表的指针节点,且q始终在p之后 bool IsIncrease(LinkList *head) {// 代码优先判空,若为空链表&#xff…

开源大模型王者归来:llama3最大4000亿参数,性能GPT4相当,超越Grok3140亿且全开源代码

llama3&Grok 目前开源的超级大模型有Gork和Llama3 https://github.com/xai-org/grok-1;该模型称为史上最大开源LLM,参数高达3140亿!马斯克如约开源Grok,10小时狂揽10000颗Star,搞笑的是这个模型只开源了推理没有训…

17.Nacos与Eureka区别

Nacos会将服务的提供者分为临时实例和非临时实例。默认为临时实例。 临时实例跟eureka一样,会向注册中心报告心跳监测自己是否还活着。如果不正常了nacos会剔除临时实例。(捡来的孩子) 非临时实例,nacos会主动询问服务提供者是否…

古董展新风尚:山海鲸数据大屏引领科技潮流

在数字化浪潮的推动下,传统文化与现代科技正日益融合,展现出独特的魅力。近日,山海鲸推出了一款古董展览数据可视化大屏,将古董藏品的丰富内涵以直观、生动的形式呈现在观众面前,让人们在欣赏古董之美的同时&#xff0…

Crash Course Computer Science

计算机速成课个人理解概要 1.计算机的本质 计算机的本质:极其简单的组件,经过一层层复杂的抽象,做出复杂的工作 2.控制电流的技术发展 继电器→真空管→晶体管 拥有了细微控制电流的手段 tip:早期机械计算机,被虫子(bug)卡住…

深入探索GDB:Linux下强大的调试神器

目录 一、GDB简介:源码级调试的基石 二、GDB基础操作:从入门到熟练 启动与基本命令 三、GDB进阶功能:解锁更深层次的调试能力 1. 回溯追踪:洞察调用栈 2. 动态内存检测:揪出内存问题 3. 条件断点与观察点&#…

制氢机远程监控运维方案

制氢机远程监控运维方案 在当今能源转型的大背景下,氢能作为清洁、高效且可再生的能源载体,其重要性日益凸显。而制氢机作为氢能产业链中的关键设备,其稳定运行与高效运维对于保障氢气供应、推动氢能产业健康发展至关重要。在此背景下&#…

基于Linux系统命令行安装KingbaseES数据库

人大金仓通用性数据库(Kingbase)下载网址:人大金仓-成为世界卓越的数据库产品与服务提供商 选择“软件版本-数据库”,筛选条件Linux、完整版。找到需要的版本,点击下载。我下载的是KingbaseES_V008R006C008B0014_Lin6…

Java中空指针异常

在Java中,大家对于空指针异常(NullPointerException)应该都不陌生,它是由于我们尝试调用了一个空引用的方法或访问其属性所产生的。下面是几个常见的原因: 1.在对象实例上调用方法,但在运行时对象为null。…

解决jupyter中使用keplergl的visualization_data函数不显示图片的问题

解决jupyter中使用keplergl的visualization_data函数不显示图片的问题 运行下面的命令:. 首先确认已经安装keplergl pip install keplergl然后运行下面两条命令: jupyter nbextension install --py --sys-prefix keplergl jupyter nbextension enabl…

实现Spring底层机制(二)

文章目录 阶段2—封装bean定义信息到Map1.代码框架图2.代码实现1.文件目录2.新增注解Scope存储单例或多例信息Scope.java3.修改MonsterService.java指定多例注解4.新增bean定义对象存储bean定义信息BeanDefinition.java5.修改pom.xml增加依赖6.修改容器实现bean定义信息扫描Sun…

nginx开启basic认证

basic认证也叫做http基本认证,防止恶意访问 首先用在线网站生成一个叫做htpasswd的账号密码文件。 将生成结果复制到/etc/nginx/htpasswd文件中 在server的location中配置 server { listen 80; server_name a.com;location / { root html;index index.…

springcloud alibaba 整合seata的TCC

一、seata服务端搭建同上篇。 Seata的AT模式客户端两阶段提交流程源码分析 二、seata客户端的结构 1.示例DEMO工程 下单,扣余额, 减库存。 2. MAVEN配置。 父工程:由于spring-cloud-starter-alibaba-seata依赖的seata-spring-boot-starter…

顺序栈着三种结构定义及其初始化

定义 顺序堆栈这三种结构定义及其初始化 - 知乎 (zhihu.com) 根据以上链接得到: 1.理解为数组,top是这个数组的索引值;定义这个结构体类型时,系统不分配空间 在主函数声明时,定义了关于这个结构体的变量&#xff0c…

Java 【数据结构】 二叉树(Binary_Tree)【神装】

登神长阶 第五神装 二叉树 Binary-Tree 目录 🎷一.树形结构 🪗1.概念 🎸2.具体应用 🎹 二.二叉树(Binary Tree) 🎺1.概念 🎻2.表现形式 🪕3.特殊类型 &#x1f941…

自己手动在Linux上实现一个简易的端口扫描器

背景 常常听到网络攻击有一个东西叫做端口扫描器,可以扫描指定服务器开放的端口,然后尝试连接,并寻找漏洞,最终攻破服务器。而那些使用的端口扫描器都是一个个现成的程序,看上去很厉害的样子。而实际上这些东西对于懂…

【前端技术】HTML基础入门篇

1.1 HTML简介 ​ HTML(HyperText Markup Language:超文本标记语言)是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组…

投资网站汇总

1、 中信证券(600030)历年财务指标——亿牛网https://eniu.com/gu/sh600030/cwzb 2、 3、 4、

上海计算机学会2022年11月月赛C++丙组T3最长平台

题目描述 给定一个整数数列 a1​,a2​,…,an​,请找出最长平台。所谓平台,就是指数列中一段连续的、完全相等的数字,单个数字也可以成为一个平台。最长平台可能不止一个,在找到最长平台的同时,输出最长平台的数量。 …

每日一题 —— 最大子数组之和(动态规划)

1.链接 53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 2.描述 3.思路 4.参考代码 class Solution { public:int maxSubArray(vector<int>& nums) {int n nums.size();vector<int> dp(n1,0);int ret INT_MIN;for(int i 1;i<n;i){dp[i] ma…