1.springbootcloud组件
2.Apollo 8.0 配置参数读取源码解析:以 Planning 模块为例
3.分享Apollo全局规划(Routing)模块最全教程
4.springbootcloudç»ä»¶
5.无人驾驶技术入门(十一)| 无人驾驶中的源码CAN消息解析
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 指定,通达信波段共振源码文件中的命令行参数在初始化时由 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 中配置参数的完整读取流程。通过理解这一过程,滑动跳转的引导页源码开发者能够更深入地掌握 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资料和技术支持,值乎平台提问。