专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

Sentinel熔断降级流控生产级改造

  时光闹钟app开发者,请关注我,后续分享更精彩!
  坚持原创,共同进步!前言
  阿里开源Sentinel框架功能强大,实现了对服务的流控、熔断降级,并支持通过管理页面进行配置和监控。Client集成支持Java、Go等语言。但管理后台Dashboard,默认只适合开发和演示,要生产环境使用需要做相应源代码级改造。本文将介绍具体改造步骤,帮助大家更快实现在生产环境的部署应用。当然,如果预算充足,也可以直接使用阿里云开箱即用的SentinelDashboard服务。整体架构
  SentinelDashboard规则默认存储在内存中,一旦服务重启,规则将丢失。要实现生产环境的大规模应用,需要把规则做持久化存储,Sentinel支持把nacoszookeeperapolloredis等中间件作为存储介质。本文以Nacos作为规则存储端进行介绍。
  整体架构如上图,SentinelDashboard通过界面操作,添加资源的规则,保存时将信息推送到nacos中。nacos收到数据变更,并实时推送到应用中的SentinelSDK客户端,SentinelSDK应用规则实现对服务资源的流控熔断降级管控。代码改造
  Sentinel使用nacos作为存储端,需要修改源代码。
  1。源代码下载gitclonegitgithub。com:hcq0514Sentinel。git
  IDE工具打开sentineldashboard项目模块
  注意:将项目切换到使用的sentineltag稳定版本,这里为1。8。6版本
  2。pom。xml添加依赖
  sentineldashboard模块pom。xml文件中,把sentineldatasourcenacos依赖的注释掉。!forNacosrulepublishersampledependencygroupIdcom。alibaba。cspgroupIdsentineldatasourcenacosartifactId!scopetestscopedependency
  3。前端页面修改
  resourcesappscriptsdirectivessidebarsidebar。html文件,将dashboard。flowV1改成dashboard。flowliuisrefactiveactivengif!entry。isGateway!iclassglyphiconglyphiconfilteri流控规则li
  4。Java代码修改
  com。alibaba。csp。sentinel。dashboard。rule包中创建一个nacos包,用来存放Nacos相关代码类。
  nacos包下创建NacosPropertiesConfiguration类,用于nacosserver配置属性封装packagecom。alibaba。csp。sentinel。dashboard。rule。nacos;importorg。springframework。boot。context。properties。ConfigurationProperties;ConfigurationProperties(prefixsentinel。nacos)publicclassNacosPropertiesConfiguration{privateStringnamespace;privateStringserverAddr;privateStringusername;privateStringpassword;省略属性setget方法。。。。。。}
  nacos包下创建NacosConfigUtil工具类publicfinalclassNacosConfigUtil{publicstaticfinalStringGROUPIDSENTINELGROUP;publicstaticfinalStringFLOWDATAIDPOSTFIXflowrules;publicstaticfinalStringDEGRADEDATAIDPOSTFIXdegraderules;publicstaticfinalStringPARAMFLOWDATAIDPOSTFIXparamrules;publicstaticfinalStringCLUSTERMAPDATAIDPOSTFIXclustermap;ccforclusterclientpublicstaticfinalStringCLIENTCONFIGDATAIDPOSTFIXccconfig;csforclusterserverpublicstaticfinalStringSERVERTRANSPORTCONFIGDATAIDPOSTFIXcstransportconfig;publicstaticfinalStringSERVERFLOWCONFIGDATAIDPOSTFIXcsflowconfig;publicstaticfinalStringSERVERNAMESPACESETDATAIDPOSTFIXcsnamespaceset;privateNacosConfigUtil(){}}
  nacos包创建NacosConfigurationbean配置类EnableConfigurationProperties(NacosPropertiesConfiguration。class)ConfigurationpublicclassNacosConfiguration{BeanQualifier(degradeRuleEntityEncoder)publicConverterListDegradeRuleEntity,StringdegradeRuleEntityEncoder(){returnJSON::toJSONString;}BeanQualifier(degradeRuleEntityDecoder)publicConverterString,ListDegradeRuleEntitydegradeRuleEntityDecoder(){returnsJSON。parseArray(s,DegradeRuleEntity。class);}BeanQualifier(flowRuleEntityEncoder)publicConverterListFlowRuleEntity,StringflowRuleEntityEncoder(){returnJSON::toJSONString;}BeanQualifier(flowRuleEntityDecoder)publicConverterString,ListFlowRuleEntityflowRuleEntityDecoder(){returnsJSON。parseArray(s,FlowRuleEntity。class);}BeanpublicConfigServicenacosConfigService(NacosPropertiesConfigurationnacosPropertiesConfiguration)throwsNacosException{PropertiespropertiesnewProperties();properties。put(PropertyKeyConst。SERVERADDR,nacosPropertiesConfiguration。getServerAddr());if(StringUtils。isNotBlank(nacosPropertiesConfiguration。getNamespace())){properties。put(PropertyKeyConst。NAMESPACE,nacosPropertiesConfiguration。getNamespace());}if(StringUtils。isNotBlank(nacosPropertiesConfiguration。getUsername())){properties。put(PropertyKeyConst。USERNAME,nacosPropertiesConfiguration。getUsername());}if(StringUtils。isNotBlank(nacosPropertiesConfiguration。getPassword())){properties。put(PropertyKeyConst。PASSWORD,nacosPropertiesConfiguration。getPassword());}returnConfigFactory。createConfigService(properties);}}
  nacos包下创建流控的provider和publisher实现类Component(flowRuleNacosProvider)publicclassFlowRuleNacosProviderimplementsDynamicRuleProviderListFlowRuleEntity{AutowiredprivateConfigServiceconfigService;AutowiredQualifier(flowRuleEntityDecoder)privateConverterString,ListFlowRuleEntityconverter;OverridepublicListFlowRuleEntitygetRules(StringappName)throwsException{StringrulesconfigService。getConfig(appNameNacosConfigUtil。FLOWDATAIDPOSTFIX,NacosConfigUtil。GROUPID,3000);if(StringUtil。isEmpty(rules)){returnnewArrayList();}returnconverter。convert(rules);}}Component(flowRuleNacosPublisher)publicclassFlowRuleNacosPublisherimplementsDynamicRulePublisherListFlowRuleEntity{AutowiredprivateConfigServiceconfigService;AutowiredQualifier(flowRuleEntityEncoder)privateConverterListFlowRuleEntity,Stringconverter;Overridepublicvoidpublish(Stringapp,ListFlowRuleEntityrules)throwsException{AssertUtil。notEmpty(app,appnamecannotbeempty);if(rulesnull){return;}configService。publishConfig(appNacosConfigUtil。FLOWDATAIDPOSTFIX,NacosConfigUtil。GROUPID,converter。convert(rules));}}
  nacos包下创建熔断降级的provider和publisher实现类Component(degradeRuleNacosProvider)publicclassDegradeRuleNacosProviderimplementsDynamicRuleProviderListDegradeRuleEntity{AutowiredprivateConfigServiceconfigService;AutowiredQualifier(degradeRuleEntityDecoder)privateConverterString,ListDegradeRuleEntityconverter;OverridepublicListDegradeRuleEntitygetRules(StringappName)throwsException{StringrulesconfigService。getConfig(appNameNacosConfigUtil。DEGRADEDATAIDPOSTFIX,NacosConfigUtil。GROUPID,3000);if(StringUtil。isEmpty(rules)){returnnewArrayList();}returnconverter。convert(rules);}}Component(degradeRuleNacosPublisher)publicclassDegradeRuleNacosPublisherimplementsDynamicRulePublisherListDegradeRuleEntity{AutowiredprivateConfigServiceconfigService;AutowiredQualifier(degradeRuleEntityEncoder)privateConverterListDegradeRuleEntity,Stringconverter;Overridepublicvoidpublish(Stringapp,ListDegradeRuleEntityrules)throwsException{AssertUtil。notEmpty(app,appnamecannotbeempty);if(rulesnull){return;}configService。publishConfig(appNacosConfigUtil。DEGRADEDATAIDPOSTFIX,NacosConfigUtil。GROUPID,converter。convert(rules));}}
  修改com。alibaba。csp。sentinel。dashboard。controller。v2。FlowControllerV2类。将注入的bean标识由下图右边替换左边的值。将原有的服务引用基于内存存储,替换为nacos存储的服务引用。上面截图红框替换值flowRuleDefaultProvider替换为flowRuleNacosProviderflowRuleDefaultPublisher替换为flowRuleNacosPublisher
  删除com。alibaba。csp。sentinel。dashboard。controller。DegradeController类,com。alibaba。csp。sentinel。dashboard。controller。v2包下新增DegradeControllerV2类RestControllerRequestMapping(degrade)publicclassDegradeControllerV2{privatefinalLoggerloggerLoggerFactory。getLogger(DegradeControllerV2。class);AutowiredprivateRuleRepositoryDegradeRuleEntity,Longrepository;AutowiredQualifier(degradeRuleNacosProvider)privateDynamicRuleProviderListDegradeRuleEntityruleProvider;AutowiredQualifier(degradeRuleNacosPublisher)privateDynamicRulePublisherListDegradeRuleEntityrulePublisher;GetMapping(rules。json)AuthAction(PrivilegeType。READRULE)publicResultListDegradeRuleEntityapiQueryMachineRules(Stringapp,Stringip,Integerport){if(StringUtil。isEmpty(app)){returnResult。ofFail(1,appcantbenullorempty);}if(StringUtil。isEmpty(ip)){returnResult。ofFail(1,ipcantbenullorempty);}if(portnull){returnResult。ofFail(1,portcantbenull);}try{ListDegradeRuleEntityrulessentinelApiClient。fetchDegradeRuleOfMachine(app,ip,port);ListDegradeRuleEntityrulesruleProvider。getRules(app);if(rules!null!rules。isEmpty()){for(DegradeRuleEntityentity:rules){entity。setApp(app);}}rulesrepository。saveAll(rules);returnResult。ofSuccess(rules);}catch(Throwablethrowable){logger。error(queryAppserror:,throwable);returnResult。ofThrowable(1,throwable);}}PostMapping(rule)AuthAction(PrivilegeType。WRITERULE)publicResultDegradeRuleEntityapiAddRule(RequestBodyDegradeRuleEntityentity){ResultDegradeRuleEntitycheckResultcheckEntityInternal(entity);if(checkResult!null){returncheckResult;}DatedatenewDate();entity。setGmtCreate(date);entity。setGmtModified(date);try{entityrepository。save(entity);}catch(Throwablet){logger。error(Failedtoaddnewdegraderule,app{},ip{},entity。getApp(),entity。getIp(),t);returnResult。ofThrowable(1,t);}if(!publishRules(entity。getApp(),entity。getIp(),entity。getPort())){logger。warn(Publishdegraderulesfailed,app{},entity。getApp());}returnResult。ofSuccess(entity);}PutMapping(rule{id})AuthAction(PrivilegeType。WRITERULE)publicResultDegradeRuleEntityapiUpdateRule(PathVariable(id)Longid,RequestBodyDegradeRuleEntityentity){if(idnullid0){returnResult。ofFail(1,idcantbenullornegative);}DegradeRuleEntityoldEntityrepository。findById(id);if(oldEntitynull){returnResult。ofFail(1,Degraderuledoesnotexist,idid);}entity。setApp(oldEntity。getApp());entity。setIp(oldEntity。getIp());entity。setPort(oldEntity。getPort());entity。setId(oldEntity。getId());ResultDegradeRuleEntitycheckResultcheckEntityInternal(entity);if(checkResult!null){returncheckResult;}entity。setGmtCreate(oldEntity。getGmtCreate());entity。setGmtModified(newDate());try{entityrepository。save(entity);}catch(Throwablet){logger。error(Failedtosavedegraderule,id{},rule{},id,entity,t);returnResult。ofThrowable(1,t);}if(!publishRules(entity。getApp(),entity。getIp(),entity。getPort())){logger。warn(Publishdegraderulesfailed,app{},entity。getApp());}returnResult。ofSuccess(entity);}DeleteMapping(rule{id})AuthAction(PrivilegeType。DELETERULE)publicResultLongdelete(PathVariable(id)Longid){if(idnull){returnResult。ofFail(1,idcantbenull);}DegradeRuleEntityoldEntityrepository。findById(id);if(oldEntitynull){returnResult。ofSuccess(null);}try{repository。delete(id);}catch(Throwablethrowable){logger。error(Failedtodeletedegraderule,id{},id,throwable);returnResult。ofThrowable(1,throwable);}if(!publishRules(oldEntity。getApp(),oldEntity。getIp(),oldEntity。getPort())){logger。warn(Publishdegraderulesfailed,app{},oldEntity。getApp());}returnResult。ofSuccess(id);}privatebooleanpublishRules(Stringapp,Stringip,Integerport){ListDegradeRuleEntityrulesrepository。findAllByMachine(MachineInfo。of(app,ip,port));returnsentinelApiClient。setDegradeRuleOfMachine(app,ip,port,rules);ListDegradeRuleEntityrulesrepository。findAllByApp(app);try{rulePublisher。publish(app,rules);}catch(Exceptione){logger。error(Failedtopublishnacos,app{},app);logger。error(erroris:,e);}returntrue;}privateRResultRcheckEntityInternal(DegradeRuleEntityentity){if(StringUtil。isBlank(entity。getApp())){returnResult。ofFail(1,appcantbeblank);}if(StringUtil。isBlank(entity。getIp())){returnResult。ofFail(1,ipcantbenullorempty);}if(entity。getPort()nullentity。getPort()0){returnResult。ofFail(1,invalidport:entity。getPort());}if(StringUtil。isBlank(entity。getLimitApp())){returnResult。ofFail(1,limitAppcantbenullorempty);}if(StringUtil。isBlank(entity。getResource())){returnResult。ofFail(1,resourcecantbenullorempty);}Doublethresholdentity。getCount();if(thresholdnullthreshold0){returnResult。ofFail(1,invalidthreshold:threshold);}IntegerrecoveryTimeoutSecentity。getTimeWindow();if(recoveryTimeoutSecnullrecoveryTimeoutSec0){returnResult。ofFail(1,recoveryTimeoutshouldbepositive);}Integerstrategyentity。getGrade();if(strategynull){returnResult。ofFail(1,circuitbreakerstrategycannotbenull);}if(strategyCircuitBreakerStrategy。SLOWREQUESTRATIO。getType()strategyRuleConstant。DEGRADEGRADEEXCEPTIONCOUNT){returnResult。ofFail(1,Invalidcircuitbreakerstrategy:strategy);}if(entity。getMinRequestAmount()nullentity。getMinRequestAmount()0){returnResult。ofFail(1,InvalidminRequestAmount);}if(entity。getStatIntervalMs()nullentity。getStatIntervalMs()0){returnResult。ofFail(1,InvalidstatInterval);}if(strategyRuleConstant。DEGRADEGRADERT){DoubleslowRatioentity。getSlowRatioThreshold();if(slowRationull){returnResult。ofFail(1,SlowRatioThresholdisrequiredforslowrequestratiostrategy);}elseif(slowRatio0slowRatio1){returnResult。ofFail(1,SlowRatioThresholdshouldbeinrange:〔0。0,1。0〕);}}elseif(strategyRuleConstant。DEGRADEGRADEEXCEPTIONRATIO){if(threshold1){returnResult。ofFail(1,Ratiothresholdshouldbeinrange:〔0。0,1。0〕);}}returnnull;}}
  5。maven打包
  重新打包sentineldashboard模块mvncleanpackage
  6。配置文件修改
  application。properties添加nacos配置项nacos服务地址sentinel。nacos。serverAddr127。0。0。1:8848nacos命名空间sentinel。nacos。namespacecsentinel。nacos。usernamesentinel。nacos。password应用端集成
  1。引入依赖dependencygroupIdcom。alibaba。cloudgroupIdspringcloudstarteralibabasentinelartifactIddependency
  如果是maven多模块工程,父pom中添加alibaba的父pom依赖dependencyManagementdependencies!https:github。comalibabaspringcloudalibabawikiE78988E69CACE8AFB4E6988EdependencygroupIdcom。alibaba。cloudgroupIdspringcloudalibabadependenciesartifactIdversion2。2。6。RELEASEversiontypepomtypescopeimportscopedependencydependenciesdependencyManagement
  2。注解支持
  Sentinel提供了SentinelResource注解用于定义资源,实现资源的流控熔断降级处理。
  注意:注解方式埋点不支持private方法。ServiceSlf4jpublicclassTestService{定义sayHello资源的方法,流控熔断降级处理逻辑paramnamereturnSentinelResource(valuesayHello,blockHandlersayHelloBlockHandler,fallbacksayHelloFallback)publicStringsayHello(Stringname){if(fallback。equalsIgnoreCase(name)){thrownewRuntimeException(fallback);}returnHello,name;}被流控后处理方法。1。SentinelResource注解blockHandler设置,值为函数方法名2。blockHandler函数访问范围需要是public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为BlockException。3。blockHandler函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定blockHandlerClass为对应的类的Class对象,注意对应的函数必需为static函数,否则无法解析。paramnameparamblockExceptionreturnpublicStringsayHelloBlockHandler(Stringname,BlockExceptionblockException){log。warn(已开启流控,blockException);return流控后的返回值;}被降级后处理方法注意!!!:如果blockHandler和fallback都配置,熔断降级规则生效,触发熔断,在熔断时长定义时间内,只有blockHandler生效1。SentinelResource注解fallback设置,值为函数方法名2。用于在抛出异常的时候提供fallback处理逻辑。fallback函数可以针对所有类型的异常(除了exceptionsToIgnore里面排除掉的异常类型)进行处理3。返回值类型必须与原函数返回值类型一致;4。方法参数列表需要和原函数一致,或者可以额外多一个Throwable类型的参数用于接收对应的异常。5。allback函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定fallbackClass为对应的类的Class对象,注意对应的函数必需为static函数,否则无法解析。paramnameparamthrowablereturnpublicStringsayHelloFallback(Stringname,Throwablethrowable){log。warn(已降级,throwable);return降级后的返回值;}}
  流控和降级处理逻辑定义详见代码注释。
  SentinelResource还包含其他可能使用的属性:exceptionsToIgnore(since1。6。0):用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入fallback逻辑中,而是会原样抛出。exceptionsToTrace:用于指定处理的异常。默认为Throwable。class。可设置自定义需要处理的其他异常类。
  3。添加配置
  application。yml文件添加以下配置spring:application:name:demosentinelcloud:sentinel:阿里sentinel配置项transport:spring。cloud。sentinel。transport。port端口配置会在应用对应的机器上启动一个HttpServer,该Server会与Sentinel控制台做交互。比如Sentinel控制台添加了一个限流规则,会把规则数据push给这个HttpServer接收,HttpServer再将规则注册到Sentinel中。port:8719dashboard:localhost:8080datasource:ds1:数据源标识key,可以随意命名,保证唯一即可nacos:nacos数据源流控规则配置serveraddr:localhost:8848username:nacospassword:nacosdataid:{spring。application。name}flowrulesgroupid:SENTINELGROUPdatatype:jsonflow、degrade、paramflowruletype:flowds2:nacos:nacos数据源熔断降级规则配置serveraddr:localhost:8848username:nacospassword:nacosdataid:{spring。application。name}degraderulesgroupid:SENTINELGROUPdatatype:jsonflow、degrade、paramflowruletype:degrade验证
  启动sentineldashboard。
  应用端集成SentinelSDK,访问添加了降级逻辑处理的接口地址。
  访问sentineldashboardweb页面:http:localhost:8080。在界面,添加相应流控和熔断规则。
  Nacos管理界面查看:http:localhost:8848nacos。可以看到自动生成了两个配置界面,分别对应流控和熔断配置
  点击规则详情,查看规则信息
  规则json对象信息如下:〔{app:sentinel,clusterConfig:{acquireRefuseStrategy:0,clientOfflineTime:2000,fallbackToLocalWhenFail:true,resourceTimeout:2000,resourceTimeoutStrategy:0,sampleCount:10,strategy:0,thresholdType:0,windowIntervalMs:1000},clusterMode:false,controlBehavior:0,count:4000,gmtCreate:1677065845653,gmtModified:1677065845653,grade:1,id:1,ip:192。168。56。1,limitApp:default,port:8720,resource:sayHello2,strategy:0},{app:sentinel,clusterConfig:{acquireRefuseStrategy:0,clientOfflineTime:2000,fallbackToLocalWhenFail:true,resourceTimeout:2000,resourceTimeoutStrategy:0,sampleCount:10,strategy:0,thresholdType:0,windowIntervalMs:1000},clusterMode:false,controlBehavior:0,count:1000,gmtCreate:1677057866855,gmtModified:1677065997762,grade:1,id:3,ip:192。168。56。1,limitApp:default,port:8720,resource:sayHello,strategy:0},{app:sentinel,clusterConfig:{acquireRefuseStrategy:0,clientOfflineTime:2000,fallbackToLocalWhenFail:true,resourceTimeout:2000,resourceTimeoutStrategy:0,sampleCount:10,strategy:0,thresholdType:0,windowIntervalMs:1000},clusterMode:false,controlBehavior:0,count:2,gmtCreate:1677117433499,gmtModified:1677117433499,grade:1,id:6,ip:192。168。56。1,limitApp:default,port:8720,resource:ping,strategy:0}〕

巴厘岛之旅直线距离369米疫情一晃就要三年了,别说出国游了,出市游都得掂量掂量才行。就来一波回忆吧,纪念自己的第一次巴厘岛之旅。当然,旅行是非常愉快的,但落地的第一个小时却是极其郁闷甚至有被坑的感觉。起因就国际最新研究早期哺乳动物生长速度快寿命短钝脚类全棱兽头骨化石(图片来自GFunston)。施普林格自然供图中新网北京9月1日电(记者孙自法)国际著名学术期刊自然最新发表一项古生物学研究指出,恐龙时代后最早的大型哺乳动物,宜居的系外星球,外卫星可以成为适合生命存在的地方,神秘的天体地球上生命发展的可能性与卫星的存在有关。但在某些情况下,卫星本身(外卫星)可以成为适合生命存在的地方,即使这颗行星位于恒星的宜居带之外。行星及其卫星的另一个能源来源可能是两个物体的什么是宇宙速度头条创作挑战赛宇宙速度是指从地面向宇宙发射人造天体必须具备的初始速度。宇宙速度通常分为三类第一宇宙速度指从地球表面向宇宙空间发射人造地球卫星所必需的最低速度,其值为79千米秒。当人雅迪2款爆款电动车上市,科技感满满,没有脚蹬,速度满足需求阅读本文前,请您先点击上面的关注,可以免费订阅我们的最新内容,感谢支持2019年4月15日以后,符合3C并允许生产销量的电动两轮车,其实不仅仅只有电动自行车,还有电轻摩和电摩两大类特种纸专题报告如何把握特纸短中期成长机遇?(报告出品方作者国金证券,谢丽媛,尹新悦)1空间格局如何理解行业中长期成长机遇?1。1空间视角渗透提升进口替代为驱动,特纸行业不断突破成长天花板1。1。1辨景气度渗透率提升型特纸特才跌70就想抄底?真正大底在12月才会出现最近陈刚有点慌,手里比特币一跌再跌,现在已经跌破19000美元了。当年斌哥在比特币4000050000美元时,让他先跑,他舍不得出,总觉得比特币还能涨到60000美元。现在资金套里1981年宋庆龄逝世,邀宋美龄回国奔丧,宋美龄八字回复令人心寒1981年,一封书信远渡重洋,寄到了身处美国的宋美龄手中,宋美龄看着信件上的字,心如刀绞。她和姐姐宋庆龄因为政见不和,半生未曾相见,如今宋庆龄离世,该是回去参加葬礼的时候。更何况信土耳其称抓获极端组织伊斯兰国一高级领导人(观察者网讯)据土耳其国家电视台(TRT)消息,当地时间8日,土总统埃尔多安宣布,土安全部队在伊斯坦布尔抓获巴沙尔哈塔布加扎勒苏迈代伊(BasharHattabGhazalAlSu关系再好的人,有这几个特征,趁早远离如果喜欢请点点关注,欢迎多多转发或者评论谢谢人这一辈子离不开朋友的帮助,不管在人生的哪个阶段,不管是失意还是得意时,如果能有一个朋友能在自己身边一直陪伴,很多事情会变得更有意思。同湖南宝马女撞人拖行事件一条人命而已,还不如她手表值钱一句我喝醉了,我意识不清醒,我不知道撞了人,这是很多人在面对肇事常说的一句话,以此来逃避更重的法律责任。一句所谓主观的我不知道,其实就是泯灭人性,丧尽天良,对生命缺乏敬畏之情。如果
蚂蚁集团2022年前三季度净利润215亿同比减少58随着阿里巴巴2022年四季报出炉,蚂蚁集团的业绩情况也得以亮相。由于阿里巴巴是延后一个季度计入蚂蚁集团的利润,所以从本次阿里季报中得出的事实上是蚂蚁集团2022年第三季度的盈利情况对标苹果M1M2高通自研12核PC芯片最快9月登场能跑Win11在苹果的M1M2系列芯片证明了ARM也能做好PC处理器之后,高通也加大了ARMPC的投入,这次不会像以前那样使用公版ARM架构来应付Win系统了,而是自研了更强大的CPU,高达12对口帮扶铜仁松桃县,东莞这家市属国企为发展支招近日,中国证券业协会(以下简称协会)组织行业机构开展了促进县域经济可持续发展调研活动。东莞市属国企东莞证券积极响应,提供的证券行业促进乡村振兴公益行动2022年县域经济调研报告贵州晚间公告丨3月1日这些公告有看头品大事厦门国贸子公司成为祥光铜业等19家公司重整投资人厦门国贸(600755)公告,子公司厦门国贸有色矿产有限公司收到阳谷祥光铜业等19家公司管理人发来的中标通知书,国贸有色在祥光董明珠不能以薪酬高低来定五险一金,无论薪酬多少,标准一致才公平每经编辑李泽东建议把个人所得税起征点提高到10000元。这将是董明珠第七次在两会上提到个税的问题。董明珠表示,受疫情影响,企业营收下滑,带来员工降薪减薪,对很多基层工作者来说,降薪新版医保药品目录实施首日板块整体回调,机构看好创新药板块新版医保目录今日起正式实施。新版国家医保药品目录新增111个药品,谈判和竞价新准入的药品价格平均降幅达60。1。最新版国家医保药品目录内药品总数达到2967种,其中西药1586种,李迅雷2023年全球经济走势与中国应对之策原标题李迅雷从土地财政转向股权财政2023年全球经济走势与中国应对之策2月28日,新财富分析师年会暨黄埔区广州开发区资本市场高端峰会盛大开幕。来自国内外的著名经济学家金融机构杰出研全国政协委员吴以环建设职业队伍,解决一老一小问题加速中医药现代化解决儿童青少年亚健康问题建设养老托育职业队伍和往年一样,连任的全国政协委员吴以环今年又准备5份提案,重点关注医疗儿童健康养老托育等民生热点领域,一老一小正是她重点关疑似天玑7200跑分数据曝光vivoV27或为首发设备虽说目前安卓阵营的处理器市场联发科开始发力,逐步能与高通一争高下,但最近力推联发科产品的手机厂商还是得看蓝厂vivo,最近有消息透露,蓝厂有款vivoV27(产品代号vivoV22华为要打造星耀子品牌手机?这让荣耀该怎么想呢?近日,有众多的媒体报道称,华为技术有限公司申请注册了星耀手机,还申请了注册了星耀手机星耀版星耀环华为星耀等商标。媒体认为,华为接下来或打造一个全新的手机子品牌,类似于原本的荣耀,而2023年2月11日IOS的AppStore软件限免7个APP推荐1。悬浮时钟抢购秒杀桌面时间信息原价6元,中文软件,有内购无广告。软件描述悬浮时钟可启动悬浮窗,悬浮时间在桌面以及任意App上。提供画中画时间模式,准时神器。下载链接httpsap
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网