皮皮网

【周线月源码】【手机点歌源码】【博客手机源码】appolo 源码解析

时间:2024-12-28 19:53:30 分类:探索 来源:顺源码燕窝

1.springbootcloud组件
2.Apollo 8.0 配置参数读取源码解析:以 Planning 模块为例
3.分享Apollo全局规划(Routing)模块最全教程
4.springbootcloud组件
5.无人驾驶技术入门(十一)| 无人驾驶中的源码CAN消息解析

appolo 源码解析

springbootcloud组件

       .SpringBoot和SpringCloud的关系

       很多人新手对于SpringBoot和SpringCloud的关系说不清楚、理解不清楚,解析本文抽出点时间来进行分享下自己的源码理解,以帮助大家更好的解析理解两者之间的关系。

       其设计目的源码之初是用来简化Spring应用的初始搭建以及开发过程。很多东西都是解析周线月源码配置好的,约定大于配置,源码使用注解替代了很多xml臃肿的解析配置,极大的源码简化了项目配置的消耗,提供了高效的解析编程脚手架。

       Cloud相当于利用了SpringBoot的源码开发便利性巧妙地简化了分布式系统基础设施的开发,像是解析服务注册发现、配置中心、源码消息总线、解析负载均衡、源码断路器、数据监控等,手机点歌源码都可以用SpringBoot的开发风格做到一键启动和部署,SpringCloud并没有重复的造轮子,把各家公司成熟,经得起考验的服务框架组合起来,通过SpringBoot屏蔽调复杂的配置和实现原理,留给开发者一套简单易懂、容易部署、容易维护的分布式开发工具包。

       其中的关系是:

       Spring-》SpingBoot-》SpringCloud

       Cloud的核心组件:

       感觉这个话题能写好多的东西,像是SpingCloud和Dubbbo的微服务选型等等再进行对比、比较优缺点,本篇就简单的进行了总结和介绍,希望能帮助到有困惑的朋友吧,后面有时间在写一些文章进行拓展和补充。

SpringCloud微服务体系的组成

       NetflixEureka是SpringCloud服务注册发现的基础组件

       Eureka提供RESTful风格(HTTP协议)的服务注册与发现

       Eureka采用C/S架构,SpringCloud内置客户端

       启用应用,访问

       Eureka客户端开发要点

       maven依赖spring-cloud-starter-netflix-eureka-clientapplication.yml

       配置eureka.client.service-url.defaultZone

       入口类增加@EnableEurekaClient

       先启动注册中心,在启动客户端,访问localhost:查看eureka注册中心,看到客户端注册

       Eureka名词概念

       Register-服务注册,向Eureka进行注册登记

       Renew-服务续约,秒/次心跳包健康检查.秒未收到剔除服务

       FetchRegistries-获取服务注册列表,获取其他微服务地址

       Cancel-服务下线,某个微服务通知注册中心暂停服务

       Eviction-服务剔除,秒未续约,从服务注册表进行剔除

       Eureka自我保护机制

       Eureka在运行期去统计心跳失败率在分钟之内是否低于%

       如果低于%,会将这些实例保护起来,博客手机源码让这些实例不会被剔除

       关闭自我保护:eureka.服务实例.

       enable-self-preservation:false

       PS:如非网络特别不稳定,建议关闭

       Eureka高可用配置步骤

       服务提供者defaultZone指向其他的Eureka

       客户端添加所有Eureka服务实例URL

       Actuator自动为微服务创建一系列的用于监控的端点

       Actuator在SpringBoot自带,SpringCloud进行扩展

       pom.xml依赖spring-boot-starter-actuator

       RestTemplate+@LoadBalanced显式调用

       OpenFeign隐藏微服务间通信细节

       Ribbon是RestTemplate与OpenFeign的通信基础

       Feign是一个开源声明式WebService客户端,用于简化服务通信

       Feign采用“接口+注解”方式开发,屏蔽了网络通信的细节

       OpenFeign是SpringCloud对Feign的增强,支持SpringMVC注解

       1.新建SpringbootWeb项目,applicationname为product-service

       在pom.xml中引入依赖

       spring-cloud-starter-alibaba-nacos-discovery作用为向Nacosserver注册服务。

       spring-cloud-starter-openfeign作用为实现服务调用。

       2.修改application.yml配置文件

       3.在启动类上添加@EnableDiscoveryClient、@EnableFeignClients注解

       4.编写OrderClientInterface

       注:/api/v1/order/test会在下面order-service声明。

       OrderClient.java

       5.编写Controller和service

       ProductController.java

       ProductService.java

       1.OpenFeign开启通信日志

       基于SpringBoot的logback输出,默认debug级别

       设置项:feign.client.config.微服务id.loggerLevel

       微服务id:default代表全局默认配置

       2.通信日志输出格式

       NONE:不输出任何通信日志

       BASIC:只包含URL、请求方法、状态码、执行时间

       HEADERS:在BASIC基础上,额外包含请求与响应头

       FULL:包含请求与响应内容最完整的信息

       3.OpenFeign日志配置项

       LoggerLevel开启通信日志

       ConnectionTimeout与ReadTimeout

       利用ponents.config.config_file_path 指定配置文件路径,文件中的参数在组件初始化时被读入 ProtoBuf 对象。

       1.2 gflags 命令行参数

       gflags 参数通过 module_config.components.config.flag_file_path 指定,watchdog python 源码文件中的命令行参数在初始化时由 gflags 解析。

       2. 配置参数读取流程

       主入口文件 (apollo/cyber/mainboard/mainboard.cc) 的 main 函数负责加载 DAG 文件并启动模块。解析命令行参数、读取 DAG 文件、执行模块加载逻辑。

       2.1 加载 DAG 文件

       解析命令行参数形成 ModuleArgument,用于存储参数信息。执行主流程时,ModuleController 负责加载所有模块,并处理模块组件的注册、实例化和初始化。

       2.2 读取配置参数

       ModuleController 通过 LoadModule 方法读取模块配置,具体步骤涉及读取 ProtoBuf 参数和 gflags 命令行参数。

       3. 总结

       本文通过分析 Planning 模块的配置读取过程,清晰展示了 Apollo 8.0 中配置参数的完整读取流程。通过理解这一过程,菜谱apk源码开发者能够更深入地掌握 Apollo 的模块启动和配置机制。

分享Apollo全局规划(Routing)模块最全教程

       本文提供Apollo全局规划(Routing)模块的全面解读,旨在帮助学习全局路径规划及理解Apollo框架。资料内容丰富,覆盖源代码注释(包含详尽代码注释)、流程图(使用思维导图及各种框架流程图)、核心算法解读(每个涉及算法均有解析及推导)、相关软件工具链学习(如C++、Python、ROS、Ubuntu、Git等)、行业现状及报告等多个方面。此套资料颗粒度极高,总结整理不易。

       如需获取资料,请私聊或访问链接:mbd.pub/o/m/author-aWuU...

       获取资料后,后续有任何问题可随时咨询。

       以下是学习资料列表概览:

       资料数量众多,每份文档通常超过几十页,内容详细深入。部分资料截图如下:

       扩展学习资源:

       欲了解Apollo其他模块,推荐以下资源:

       分享Apollo决策规划(planning)模块最全教程 - 知乎 (zhihu.com)

       分享Apollo预测(prediction)模块最全教程 - 知乎 (zhihu.com)

       分享Apollo控制(control)模块最全教程 - 知乎 (zhihu.com)

springbootcloud组件

       .SpringBoot和SpringCloud的关系

       å¾ˆå¤šäººæ–°æ‰‹å¯¹äºŽSpringBoot和SpringCloud的关系说不清楚、理解不清楚,本文抽出点时间来进行分享下自己的理解,以帮助大家更好的理解两者之间的关系。

       å…¶è®¾è®¡ç›®çš„之初是用来简化Spring应用的初始搭建以及开发过程。很多东西都是配置好的,约定大于配置,使用注解替代了很多xml臃肿的配置,极大的简化了项目配置的消耗,提供了高效的编程脚手架。

       Cloud相当于利用了SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,像是服务注册发现、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用SpringBoot的开发风格做到一键启动和部署,SpringCloud并没有重复的造轮子,把各家公司成熟,经得起考验的服务框架组合起来,通过SpringBoot屏蔽调复杂的配置和实现原理,留给开发者一套简单易懂、容易部署、容易维护的分布式开发工具包。

       å…¶ä¸­çš„关系是:

       Spring-》SpingBoot-》SpringCloud

       Cloud的核心组件:

       æ„Ÿè§‰è¿™ä¸ªè¯é¢˜èƒ½å†™å¥½å¤šçš„东西,像是SpingCloud和Dubbbo的微服务选型等等再进行对比、比较优缺点,本篇就简单的进行了总结和介绍,希望能帮助到有困惑的朋友吧,后面有时间在写一些文章进行拓展和补充。

SpringCloud微服务体系的组成

       NetflixEureka是SpringCloud服务注册发现的基础组件

       Eureka提供RESTful风格(HTTP协议)的服务注册与发现

       Eureka采用C/S架构,SpringCloud内置客户端

       å¯ç”¨åº”用,访问

       Eureka客户端开发要点

       maven依赖spring-cloud-starter-netflix-eureka-clientapplication.yml

       é…ç½®eureka.client.service-url.defaultZone

       å…¥å£ç±»å¢žåŠ @EnableEurekaClient

       å…ˆå¯åŠ¨æ³¨å†Œä¸­å¿ƒ,在启动客户端,访问localhost:查看eureka注册中心,看到客户端注册

       Eureka名词概念

       Register-服务注册,向Eureka进行注册登记

       Renew-服务续约,秒/次心跳包健康检查.秒未收到剔除服务

       FetchRegistries-获取服务注册列表,获取其他微服务地址

       Cancel-服务下线,某个微服务通知注册中心暂停服务

       Eviction-服务剔除,秒未续约,从服务注册表进行剔除

       Eureka自我保护机制

       Eureka在运行期去统计心跳失败率在分钟之内是否低于%

       å¦‚果低于%,会将这些实例保护起来,让这些实例不会被剔除

       å…³é—­è‡ªæˆ‘保护:eureka.服务实例.

       enable-self-preservation:false

       PS:如非网络特别不稳定,建议关闭

       Eureka高可用配置步骤

       æœåŠ¡æä¾›è€…defaultZone指向其他的Eureka

       å®¢æˆ·ç«¯æ·»åŠ æ‰€æœ‰Eureka服务实例URL

       Actuator自动为微服务创建一系列的用于监控的端点

       Actuator在SpringBoot自带,SpringCloud进行扩展

       pom.xml依赖spring-boot-starter-actuator

       RestTemplate+@LoadBalanced显式调用

       OpenFeign隐藏微服务间通信细节

       Ribbon是RestTemplate与OpenFeign的通信基础

       Feign是一个开源声明式WebService客户端,用于简化服务通信

       Feign采用“接口+注解”方式开发,屏蔽了网络通信的细节

       OpenFeign是SpringCloud对Feign的增强,支持SpringMVC注解

       1.新建SpringbootWeb项目,applicationname为product-service

       åœ¨pom.xml中引入依赖

       spring-cloud-starter-alibaba-nacos-discovery作用为向Nacosserver注册服务。

       spring-cloud-starter-openfeign作用为实现服务调用。

       2.修改application.yml配置文件

       3.在启动类上添加@EnableDiscoveryClient、@EnableFeignClients注解

       4.编写OrderClientInterface

       æ³¨ï¼š/api/v1/order/test会在下面order-service声明。

       OrderClient.java

       5.编写Controller和service

       ProductController.java

       ProductService.java

       1.OpenFeign开启通信日志

       åŸºäºŽSpringBoot的logback输出,默认debug级别

       è®¾ç½®é¡¹ï¼šfeign.client.config.微服务id.loggerLevel

       å¾®æœåŠ¡id:default代表全局默认配置

       2.通信日志输出格式

       NONE:不输出任何通信日志

       BASIC:只包含URL、请求方法、状态码、执行时间

       HEADERS:在BASIC基础上,额外包含请求与响应头

       FULL:包含请求与响应内容最完整的信息

       3.OpenFeign日志配置项

       LoggerLevel开启通信日志

       ConnectionTimeout与ReadTimeout

       åˆ©ç”¨flix-hystrix-dashboard

       ç›‘控微服务利用@EnableHystrixDashboard开启仪表盘

       9.Hystrix熔断设置

       äº§ç”Ÿç†”断的条件:

       å½“一个RollingWindow(滑动窗口)的时间内(默认:秒),最近次调用请求,请求错误率超过%,则触发熔断5秒,期间快速失败。

       TIPS:如秒内未累计到次,则不会触发熔断

       Hystrix熔断设置项:

       ç»Ÿä¸€è®¿é—®å‡ºå…¥å£,微服务对前台透明

       å®‰å…¨ã€è¿‡æ»¤ã€æµæŽ§ç­‰API管理功能

       æ˜“于监控、方便管理

       NetflixZuul

       SpringCloudGateway

       Zuul是Netflix开源的一个API网关,核心实现是Servlet

       SpringCloud内置Zuul1.x

       Zuul1.x核心实现是Servlet,采用同步方式通信

       Zuul2.x基于NettyServer,提供异步通信

       è®¤è¯å’Œå®‰å…¨

       æ€§èƒ½ç›‘测

       åŠ¨æ€è·¯ç”±

       è´Ÿè½½å¸è½½

       é™æ€èµ„源处理

       åŽ‹åŠ›æµ‹è¯•

       SpringCloudGateway,是Spring“亲儿子”

       SpringCloudGateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式

       Gateway基于Spring5.0与SpringWebFlux开发,采用Reactor响应式设计

       1.使用三部曲

       ä¾èµ–spring-cloud-starter-netflix-zuul

       å…¥å£å¢žåŠ @EnableZuulProxy

       application.yml增加微服务映射

       2.微服务映射

       SpringCloudZuul内置Hystrix

       æœåŠ¡é™çº§å®žçŽ°æŽ¥å£ï¼šFallbackProvider

       1.微服务网关流量控制

       å¾®æœåŠ¡ç½‘关是应用入口,必须对入口流量进行控制

       RateLimit是SpringCloudZuul的限流组件

       RateLimit采用“令牌桶”算法实现限流

       2.什么是令牌桶

       1.Zuul的执行过程

       2.Http请求生命周期

       1.需要实现ZuulFilter接口

       shouldFilter()-是否启用该过滤器

       filterOrder()-设置过滤器执行次序

       filterType()-过滤器类型:pre|routing|post

       run()-过滤逻辑

       2.Zuul内置过滤器

       3.Zuul+JWT跨域身份验证

       1.SpringCloudConfig

       2.携程Apollo

       3.阿里巴巴Nacos

       1.依赖"spring-cloud-starter-config"

       2.删除application.yml,新建bootstrap.yml

       3.配置"配置中心"服务地址与环境信息

       1、微服务依赖"spring-boot-starter-actuator";

       2、动态刷新类上增加@RefreshScope注解

       3、通过/actuator/refresh刷新配置

       1、通过加入重试机制、提高应用启动的可靠性;

       2、重试触发条件1:配置中心无法与仓库正常通信

       3、重试触发条件2:微服务无法配置中心正常通信

       SpringCloud整体构架设计(一)

       SpringClound整体核心架构只有一点:Rest服务,也就是说在整个SpringCloud配置过程之中,所有的配置处理都是围绕着Rest完成的,在这个Rest处理之中,一定要有两个端:服务的提供者(Provider)、服务的消费者(Consumer),所以对于整个SpringCloud基础的结构就如下所示:

       æ—¢ç„¶SpringCloud的核心是Restful结构,那么如果要想更好的去使用Rest这些微服务还需要考虑如下几个问题。

       1、所有的微服务地址一定会非常的多,所以为了统一管理这些地址信息,也为了可以及时的告诉用户哪些服务不可用,所以应该准备一个分布式的注册中心,并且该注册中心应该支持有HA机制,为了高速并且方便进行所有服务的注册操作,在SpringCloud里面提供有一个Eureka的注册中心。

       å¯¹äºŽæ•´ä¸ªçš„WEB端的构架(SpringBoot实现)可以轻松方便的进行WEB程序的编写,而后利用Nginx或Apache实现负载均衡处理,但是你WEB端出现了负载均衡,那么业务端呢?应该也提供有多个业务端进行负载均衡。那么这个时候就需要将所有需要参与到负载均衡的业务端在Eureka之中进行注册。

       åœ¨è¿›è¡Œå®¢æˆ·ç«¯ä½¿ç”¨Rest架构调用的时候,往往都需要一个调用地址,即使现在使用了Eureka作为注册中心,那么它也需要有一个明确的调用地址,可是所有的操作如果都利用调用地址的方式来处理,程序的开发者最方便应用的工具是接口,所以现在就希望可以将所有的Rest服务的内容以接口的方式出现调用,所以它又提供了一个Feign技术,利用此技术可以伪造接口实现。

       åœ¨è¿›è¡Œæ•´ä½“的微架构设计的时候由于牵扯的问题还是属于RPC,所以必须考虑熔断处理机制,实际上所有的熔断就好比生活之中使用保险丝一样,有了保险丝在一些设备出现了故障之后依然可以保护家庭的电器可以正常使用,如果说现在有若干的微服务,并且这些微服务之间可以相互调用,例如A微服务调用了B微服务,B微服务调用了C微服务。

       å¦‚果在实际的项目设计过程之中没有处理好熔断机制,那么就会产生雪崩效应,所以为了防止这样的问题出现,SpringCloud里面提供有一个Hystrix熔断处理机制,以保证某一个微服务即使出现了问题之后依然可以正常使用。

       é€šè¿‡Zuul的代理用户只需要知道指定的路由的路径就可以访问指定的微服务的信息,这样更好的提现了java中的“key=value”的设计思想,而且所有的微服务通过zuul进行代理之后也更加合理的进行名称隐藏。

       åœ¨SpringBoot学习的时候一直强调过一个问题:在SpringBoot里面强调的是一个“零配置”的概念,本质在于不需要配置任何的配置文件,但是事实上这一点并没有完全的实现,因为在整个在整体的实际里面,依然会提供有application.yml配置文件,那么如果在微服务的创建之中,那么一定会有成百上千个微服务的信息出现,于是这些配置文件的管理就成为了问题。例如:现在你突然有一天你的主机要进行机房的变更,所有的服务的IP地址都可能发生改变,这样对于程序的维护是非常不方便的,为了解决这样的问题,在SpringCloud设计的时候提供有一个SpringCloudConfig的程序组件,利用这个组件就可以直接基于GIT或者SVN来进行配置文件的管理。

       åœ¨æ•´ä½“设计上SpringCloud更好的实现了RPC的架构设计,而且使用Rest作为通讯的基础,这一点是他的成功之处,由于大量的使用了netflix公司的产品技术,所以这些技术也有可靠的保证。

Spring全家桶笔记:Spring+SpringBoot+SpringCloud+SpringMVC

       æœ€è¿‘我整理了一下一线架构师的Spring全家桶笔记:Spring+SpringBoot+SpringCloud+SpringMVC,分享给大家一起学习一下~文末免费获取哦

       Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

       1.1Spring面试必备题+解析

       1.2Spring学习笔记

       ï¼ˆ1)Spring源码深入解析

       ï¼ˆ2)Spring实战

       1.3Spring学习思维脑图

       SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,SpringBoot致力于在蓬勃发展的快速应用开发领域(rapidapplicationdevelopment)成为领导者。

       2.1SpringBoot面试必备题+解析

       2.2SpringBoot学习笔记

       ï¼ˆ1)SpringBoot实践

       ï¼ˆ2)SpringBoot揭秘快速构建微服务体系

       2.3SpringBoot学习思维脑图

       springcloud是微服务架构的集大成者,将一系列优秀的组件进行了整合。基于springboot构建,对我们熟悉spring的程序员来说,上手比较容易。通过一些简单的注解,我们就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。

       3.1SpringCloud面试必备题+解析

       3.2SpringCloud学习笔记

       ï¼ˆ1)SpringCloud参考指南

       SpringMVC是一种基于Java的实现MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发

       4.1SpringMVC面试必备题+解析

       4.2SpringMVC学习笔记

       ï¼ˆ1)看透SpringMVC源代码分析与实践

       ï¼ˆ2)精通SpringMVC

       æœ€åŽåˆ†äº«ä¸€ä¸‹ä¸€ä»½JAVA核心知识点整理(PDF)

SpringBoot和SpringCloud的区别

       1、springcloud是基于springboot的一种框架,包括eureka、ribbon、feign、zuul、hystrix等

       2、SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot

       3、Springboot是Spring的一套快速配置脚手架,可以基于springboot快速开发单个微服务;SpringCloud是一个基于SpringBoot实现的云应用开发工具;

       4、Springboot专注于快速、方便集成的单个个体,SpringCloud是关注全局的服务治理框架;

       5、springboot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,SpringCloud很大的一部分是基于Springboot来实现。

       6、Springboot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开Springboot,属于依赖的关系。

       Spring-SpringBootSpringCloud这样的关系

无人驾驶技术入门(十一)| 无人驾驶中的CAN消息解析

       前言

       本文聚焦于无人驾驶技术中至关重要的CAN总线机制。在无人驾驶系统中,CAN总线扮演着不可或缺的角色,不仅用于传输VCU信号,还涉及雷达、Mobileye等传感器的数据交换。

       实现一个完整的无人驾驶系统需涉及感知、融合、规划与控制等多个层级。在这篇分享中,重点探讨了“驱动层”相关的CAN总线内容。

       正文

       作为高效可靠的通信机制,CAN总线在汽车电子领域广泛应用。本文着重于解释在无人驾驶系统接收到CAN消息后,如何利用CAN协议解析出所需数据,解析传感器信息是自动驾驶工程师的核心技能。

       认识CAN消息

       以Apollo开源代码为例,剖析CAN消息结构,包括ID号、长度、数据和时间戳。ID号用于确认节点间通信,扩展帧和普通帧的区分依据于此。长度表示数据量,最多8个无符号整数或8*8个bool类型数据。数据部分是消息的核心,通过8*8方格可视化,解析变得直观。时间戳记录接收时刻,用于判断通信状态。

       认识CAN协议

       业界使用后缀为dbc的文件存储CAN协议,Vector公司的CANdb++ Editor软件专门用于解析dbc文件。Mobileye的车道线信息通过dbc文件格式传递,以ID号0x的LKA_Left_Lane_A为例,解析信号包括类型、质量、曲率等物理量。通过软件界面直接关联彩色图与data,解析过程变得清晰。

       解析CAN信号

       解析过程基于彩色图与data的一一对应关系,通过叠加图表,揭示数据结构。对于Factor为1的物理量,解析直接。Factor为小数的物理量则需运用位移运算。以Apollo源码为例,通过移位和位运算解析出完整物理量。

       与CAN类似的通信协议

       虽然传感器采用不同通信方式,如雷达、激光雷达、GPS和惯导,但解析方法保持一致。解析的关键在于理解信号的类型、值和单位。

       结语

       本篇分享全面解析了CAN总线消息的解析过程,涵盖了无人驾驶系统驱动层的基本理论。解析ID不同的CAN消息结构要求高度细致,避免后续处理中的意外错误。如有疑问,欢迎在评论区互动。赞赏与关注是对文章价值的直接体现。

       获取相关软件和文件的方法,请关注公众号:自动驾驶干货铺,后台回复“CAN”获取。更多Mobileye资料和技术支持,值乎平台提问。

copyright © 2016 powered by 皮皮网   sitemap