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

SpringCloud使用注解AOPMQ来实现日志管理模块

  简介
  无论在什么系统中,日志管理模块都属于十分重要的部分,接下来会通过注解AOPMQ的方式实现一个简易的日志管理系统思路注解:标记需要记录日志的方法AOP:通过AOP增强代码,利用后置异常通知的方式获取相关日志信息,最后使用MQ将日志信息发送到专门处理日志的系统RabbitMQ:利用解耦、异步的特性,协调完成各个微服务系统之间的通信1、日志表结构
  表结构(syslog):CREATETABLEsyslog(idint(11)NOTNULLAUTOINCREMENTCOMMENT唯一ID,optidint(11)DEFAULTNULLCOMMENT操作用户id,optnamevarchar(50)DEFAULTNULLCOMMENT操作用户名,logtypevarchar(20)DEFAULTNULLCOMMENT日志类型,logmessagevarchar(255)DEFAULTNULLCOMMENT日志信息(具体方法名),createtimedatetimeDEFAULTNULLCOMMENT创建时间,PRIMARYKEY(id))ENGINEInnoDBAUTOINCREMENT17DEFAULTCHARSETutf8COMMENT系统日志表;
  实体类(SysLog):DatapublicclassSysLog{privatestaticfinallongserialVersionUID1L;唯一IDTableId(valueid,typeIdType。AUTO)privateIntegerid;操作用户idprivateIntegeroptId;操作用户名privateStringoptName;日志类型privateStringlogType;日志信息(具体方法名)privateStringlogMessage;创建时间privateDatecreateTime;}2、注解注解(SystemLog):
  仅作为标记的作用,目的让JVM可以识别,然后可以从中获取相关信息Target:定义注解作用的范围,这里是方法Retention:定义注解生命周期,这里是运行时Target(ElementType。METHOD)Retention(RetentionPolicy。RUNTIME)publicinterfaceSystemLog{SystemLogEnumtype();}枚举(SystemLogEnum):
  限定日志类型范围publicenumSystemLogEnum{SAVELOG(保存),DELETELOG(删除),REGISTERLOG(注册),LOGINLOG(登录),LAUDLOG(点赞),COLLECTLOG(收藏),THROWLOG(异常),;privateStringtype;SystemLogEnum(Stringtype){this。typetype;}publicStringgetType(){returntype;}}3、AOP切面AOP(SysLogAspect):
  实现代码的增强,主要通过动态代理方式实现的代码增强。拦截注解,并获取拦截到的相关信息,封装成日志对象发送到MQ队列(生产端)ComponentAspectSlf4jpublicclassSysLogAspect{AutowiredMqStreamstream;切点Pointcut(annotation(cn。zdxh。commons。utils。SystemLog))publicvoidlogPointcut(){}后置通知After(logPointcut())publicvoidafterLog(JoinPointjoinPoint){一般日志SysLogsysLogwrapSysLog(joinPoint);log。info(Log值:sysLog);发送mq消息stream。logOutput()。send(MessageBuilder。withPayload(sysLog)。build());}异常通知AfterThrowing(valuelogPointcut(),throwinge)publicvoidthrowingLog(JoinPointjoinPoint,Exceptione){异常日志SysLogsysLogwrapSysLog(joinPoint);sysLog。setLogType(SystemLogEnum。THROWLOG。getType());sysLog。setLogMessage(sysLog。getLogMessage()e);log。info(异常Log值:sysLog);发送mq消息stream。logOutput()。send(MessageBuilder。withPayload(sysLog)。build());}封装SysLog对象paramjoinPointreturnpublicSysLogwrapSysLog(JoinPointjoinPoint){获取请求响应对象ServletRequestAttributesattributes(ServletRequestAttributes)RequestContextHolder。getRequestAttributes();HttpServletRequestrequestattributes。getRequest();MethodSignaturesignature(MethodSignature)joinPoint。getSignature();SysLogsysLognewSysLog();获取方法全路径StringmethodNamesignature。getDeclaringTypeName()。signature。getName();获取注解参数值SystemLogsystemLogsignature。getMethod()。getAnnotation(SystemLog。class);从header取出tokenStringtokenrequest。getHeader(token);if(!StringUtils。isEmpty(token)){操作人信息IntegeruserIdJwtUtils。getUserId(token);StringusernameJwtUtils。getUsername(token);sysLog。setOptId(userId);sysLog。setOptName(username);}if(!StringUtils。isEmpty(systemLog。type())){sysLog。setLogType(systemLog。type()。getType());}sysLog。setLogMessage(methodName);sysLog。setCreateTime(newDate());returnsysLog;}}3、RabbitMQ消息队列MQ:
  这里主要是通过SpringCloudStream集成的RabbitMQSpringCloudStream:
  作为MQ的抽象层,已屏蔽各种MQ的各自名词,统称为input、output两大块。可以更方便灵活地切换各种MQ,如kafka、RocketMQ等
  (1)定义InputOuput接口(MqStream)ComponentpublicinterfaceMqStream{StringLOGINPUTloginput;StringLOGOUTPUTlogoutput;Input(LOGINPUT)SubscribableChannellogInput();Output(LOGOUTPUT)MessageChannellogOutput();}(2)MQ生产者
  注:这里使用到AOP切面的微服务,都属于MQ生产者服务
  引入依赖:
  这里没有版本号的原因是springcloud已经帮我们管理好各个版本号,已无需手动定义版本号!SpringCloudStreamdependencygroupIdorg。springframework。cloudgroupIdspringcloudstreamartifactIddependencydependencygroupIdorg。springframework。cloudgroupIdspringcloudstreambinderrabbitartifactIddependency
  在程序入口开启MQ的InputOutput绑定:SpringBootApplication(scanBasePackages{cn。zdxh。user,cn。zdxh。commons})EnableEurekaClientMapperScan(cn。zdxh。user。mapper)EnableBinding(MqStream。class)开启绑定EnableFeignClientspublicclassYouquServiceProviderUserApplication{publicstaticvoidmain(String〔〕args){SpringApplication。run(YouquServiceProviderUserApplication。class,args);}}
  yml配置:
  在生产者端设置outputdestination:相当于rabbitmq的exchangegroup:相当于rabbitmq的queue,不过是和destination一起组合成的queue名binder:需要绑定的MQSpringCloudStream相关配置spring:cloud:stream:bindings:exchange与queue绑定logoutput:日志生产者设置outputdestination:log。exchangecontenttype:applicationjsongroup:log。queuebinder:youqurabbit自定义名称binders:youqurabbit:自定义名称type:rabbitenvironment:spring:rabbitmq:host:localhostport:5672username:guestpassword:25802580
  注:完成以上操作,即完成MQ生产端的所有工作(3)MQ消费者
  引入依赖、开启InputOutput绑定:均和生产者的设置一致
  yml配置:
  在生产者端设置inputspring:cloud:SpringCloudStream相关配置stream:bindings:exchange与queue绑定loginput:日志消费者设置inputdestination:log。exchangecontenttype:applicationjsongroup:log。queuebinder:youqurabbitbinders:youqurabbit:type:rabbitenvironment:spring:rabbitmq:host:localhostport:5672username:guestpassword:25802580
  消费者监听(LogMqListener):
  监听生产者发过来的日志信息,将信息添加到数据库即可ServiceSlf4jpublicclassLogMqListener{AutowiredSysLogServicesysLogService;StreamListener(MqStream。LOGINPUT)publicvoidinput(SysLogsysLog){log。info(开始记录日志);sysLogService。save(sysLog);log。info(结束记录日志);}}
  注:完成以上操作,即完成MQ消费端的所有工作4、应用
  简述:
  只需将SystemLog(typeSystemLogEnum。REGISTERLOG),标记在需要记录的方法上,当有客户端访问该方法时,就可以自动完成日志的记录
  5、总结
  流程:
  注解标记AOP拦截日志发送到MQ专门处理日志的系统监听MQ消息日志插入到数据库
  来源:blog。csdn。netweixin38802061articledetails105458047

50多岁,膝盖疼得厉害,这是什么原因?您这个问题提的真的是过于复杂,虽然只有简简单单的几个字,但是50岁的年龄,出现膝关节疼痛的原因有太多了。比如过度的运动常年的劳累,比如骨关节炎,比如痛风或类风湿等这些内科疾病,都会直肠癌一般化疗几次?直肠癌一般化疗几次?不知道,因为没有说明具体病情,连最基本的分期都没有说,根本没法说,非要回答的话,只能这样说2次,4次,10次,12次都可能,看病情。这个问题下面有个消化内科医生现在的实体店很难做,但是还有很多人前赴后继,为什么呢?首先分享一个观点,也是一种心态!不是实体店难做,而是你的实体店生意难做,是传统做法的实体店生意难做!说到这个问题,我们静静的想想!10年前,5年前的当时,我们和今天一样,认为生意难因为招联金融,网贷逾期而坐牢的人多嘛?网贷逾期不会坐牢,招联金融逾期会上征信,但不会坐牢,真实情况是,我们领班招联金融欠了23万,逾期一年,通讯录被爆完了,不过他没钱还爆了就爆了,也找人线下找他还钱,但他确实没钱还,然山东枣庄一个月工资7000,什么水平?10002000大有人在,20003000最为普遍,7000凤毛麟角,四线城市房价破万。你好,很高兴回答这个问题我是枣庄本地人,7000属于工资收入中的上等水平,现在公务员教师医生两周岁宝宝应该会什么,怎样培育宝宝?所谓对症下药,知道了两岁宝宝的身心发展概况,教育宝宝也有了针对性。两岁宝宝的学习方式依然是体验式学习,也就是从感官的体验中了解和学习客观事物,得到身心发展。因此从游戏中学习是两岁宝怎样能看出怀孕是不是横位?你好!怎么能看出怀孕是不是横位。民间有种说法就是胎儿横位是女孩的几率很高,到底是不是这样呢?造成胎儿横位的原因众多,胎盘前置子宫畸形脐带异常等,胎儿为横位不一定是女孩。孕期胎儿为横怀孕7个月宝宝是在什么位置的?怎么判断?怀孕7个月宝宝是在什么位置的?怎么判断?怀孕7个月也就是28周了,这时子宫底已经上升到了肚脐以上3横指的位置。胎儿的体重已有11001400克,坐高约为26厘米,几乎快占满整个子宫有什么游戏可以长时间玩的?您的问题我的观点如下1什么游戏能长时间玩,那么这个游戏必须足够经得起时间的考验我的世界无疑是一个非常棒的选择,全球沙盒下载量第一而且也是一款经久不衰的一款游戏2英雄联盟毫无疑问英雄王者荣耀1v1后期谁能打过程咬金?我出五件霸者重装,一件复活甲,耗到对方怀疑人生,看谁电多了!爱上一个不回家的人,唯一结局就是无止境地等程咬金这个英雄,一人玩爽,九人智商接受考验。我喜欢把他爱称为小韩信。首先赖线能新华社,人民日报等点名批评李铁,李铁是不是要下课了?何止下课?!为了减少对热爱足球人民的精神损失,暂且撤了足联足协等官方组织!别再浪费钱财了。十年后再重新组建吧!碰拳碰拳碰拳加油加油加油肯定是要凉了,球迷们看的很清楚,大家都很清楚,
融资周报21家企业即将首发上会,上海企业占5席11月第3期11141120创投融资本期国内共有135笔融资事件,其中21笔已披露融资金额过亿,主要集中在制造业企业服务赛道。企业上会本期国内共有10家企业首发上会通过,下期将有2创投新闻A轮融资作者沈筱编辑王与桐近日,AI数字人直播间解决方案研发商白扬智能获数千万元PreA轮融资,投资方信息未披露。白扬智能由上海白扬广告传媒有限公司推出。公司成立于2021年6月,团队核心变脸变的太快上一周各路游资大神们还在捕获跨年十倍大妖,没想到裁判出来喊了一声后,市场直接上演铁锅炖大鹅,大刀被砍后,市场只能转向确定性,这不中字头连续活跃两天。昨天来了一手跌个股涨大盘后,今天被深交所点名后再受关注,实地走访深陷舆论漩涡的达科为近日,离上市仅一步之遥的深圳市达科为生物技术股份有限公司(下称达科为)可谓站在了舆论的风口浪尖。95后在校生为实控人主营业务的科技成色几何交易所表态从严审核核酸检测企业上市申请一时朱虹乡村振兴未来可期驻村第一书记来自江西乡村振兴的50个样本黄细嘉主编江西高校出版社出版行走在赣鄱大地广袤的乡村田野上,路网交织花草缤纷青山如黛绿水环绕,处处鸟语花香,村村景色宜人,一幅和谐幸福秀美的明年1月,两三四轮车有新规,3类车不能上路,1类车要求放宽您在阅读前请点击上面的关注二字,后续会为您提供更多有价值的相关内容,感谢您的支持。电动车是现在主要的道路交通之一,两三四轮电动车,都是许多人生活中很依赖的出行工具,而关于电动车的新科学强国侯德榜中国近代化学工业拓荒者1933年,英文版纯碱制造一书在纽约出版的时候,书商制作了这样一幅广告画一个中国少年在稻田边的水车上,一边踩水车,一边手捧书本阅读。这幅广告画上所描述的故事,是在闽侯广为流传的佳话5年前,那个父病母残,以744分考上清华的河北男孩,后来过得如何在阅读此文之前,麻烦您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持!前言两老一少两病的家庭环境,并没有阻止这个孩子进步的脚步,一家人用爱的温暖,帮助津云关注22岁被称为蜡烛女王,她让中国创造享誉非洲11月21日上午10点,天津世纪圣发集团的蜡烛车间门前,目送着一货柜白杆蜡被装车拉走,总经理刘文君再一次打开了手机日历,从天津港到尼日利亚阿帕帕港,这班船期预计61天,算上清关,3中国国际动漫节迎来18岁成年礼八大亮点抢先看11月23日下午,第十八届中国国际动漫节新闻发布会在杭州国际博览中心召开。杭州市委常委宣传部长中国国际动漫节执委会主任黄海峰致辞杭州市委宣传部副部长市文明办主任中国国际动漫节执委会2022中国航天大会大手拉小手科普报告会航天科普大讲堂开讲11月21日,2022中国航天日大手拉小手科普报告汇航天科普大讲堂活动在海南大学启动。首场讲座邀请了中国工程院士战略导弹与运载火箭专家龙乐豪,为师生们带来一场精彩的航天知识科普讲座
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网