nacos+springboot+dubbo2.7.3统一处理异常的方法


这篇“nacos+springboot+dubbo2.7.3统一处理异常的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“nacos+springboot+dubbo2.7.3统一处理异常的方法”文章吧。不同开发团队间便于追溯异常的来源以及为了便于定位问题的需要往往实际开发中的架构是这么一个样子的:dubbo微服务架构简图不同层的开发人员都是不同的人或者是不同的几波人马;无状态的API层(一组Tomcat对Nginx Web层的API暴露)是一组开发团队;微服务Dubbo层是另一组开发团队;在调试、测试、上线后我们经常会发生各种Exception,此时这几个不同的开发团队间会互相扯皮、打架,并且大家都要忙于定位这个Exception到底是发生在哪一层,甚至需要追溯Exception发生在哪个点(stackTrace)。Service层有数据库事务一致性的问题必须抛出异常我们都知道在spring中的Service层必须抛出Runtime Exception,否则Service层的方法如果有涉及数据库的修改操作是不会回滚的。其实解决方案真正的无外乎就2种:provider向远程consumer层直接抛RuntimeException即可;provider端把所有的Exception进行统一包装,向consumer端返回json报文体的类似message:xxx,code:500,data{xxx:xxx,xxx:xxx}这样的消息而在provider端进行“logger.error”的记录即可;本文把这2种实现方式都给实现了,下面开始直接show me the code的方式来说话吧。环境搭建nacos1.1.4我们这边不用dubbo admin,因为dubbo admin太老且使用不方便,缺少了很多管理微服务所需要的基本功能。并且dubbo从2.6开始已经把dubbo admin从它的主工程里分离了出去,同时dubbo2.6开始支持nacos registry了。目前来说nacos是最方便、效率最高、功能最强大的微服务发现组件(甚至支持spring cloud)。下载地址在这里(请戳):阿里nacos最新下载地址下载后直接解压,然后进行nacos配置编辑这个application.properties文件,我们把nacos自动服务发现管理端连上自己开发环境上的mysql。配完后直接双击:startup.cmd启动nacos登录界面中使用nacos/nacos即可进行登录了。登录后看到nacos管理界面就说明nacos配置和启动成功了。接下来我们就要开始书写dubbo的provider端与consumer端了。nacos-parent工程整个工程我已经放在git上了,地址请戳这里:nacos-dubbo-demo工程的依赖结构如下:由于dubbo与springboot结合的项目不多,很多网上有的博客也充斥着乱抄、自己都没有验证过就上代码的,因此大多网友们通过网上之言片语拼凑起来的项目在本地很难运行起来,不是maven包冲突就是少这个、那个包。下面给出工程的parent pom文件。演示用数据库(mySQL5.7)建表语句它建了两张表,t_product表和t_stock表。这两张表我们会用于演示dubbo provider中对于数据库一致性插入时在碰到Exception时怎么处理回滚的场景。nacos-service工程搭建说明先上pom.xml(很重要,这里面的依赖是正确的springboot+dubbo+nacos客户端的完整配置)然后我们设置application.properties文件内容这边dubbo的部分配置是相对于我虚拟出来的模拟环境4C CPU,4GB内存来设的,具体更多设置参数可以直接参照于dubbo官方文档。我们可以看到要把dubbo与nacos连接起来只需要在pom.xml文件中引入以及在application.properties文件中把相应的dubbo协议依旧使用dubbo,这是因为dubbo2.6中已经带入了nacos-registry了,因此就必须把dubbo.registry.address设成指向你本机的nacos启动实例(默认为8848端口)即可。springboot的启动代码,Application.java有两个重要的注解@EnableDubbo申明该项目启用dubbo的自动注解;@EnableTransactionManagement申明该项目会使用数据库事务;把项目连接上数据库我们使用druid做数据库的连接池。制作一个自定义的全局Exception,DemoRpcRunTimeException把它放置于common项目内制作一个AOP, DemoRpcRuntimeExceptionHandler用于包装自定的异常用,它位于nacos-service项目中,做它会以AOP的方式注入。开始进入核心provider Service端的制作。ProductService接口我们把它放置于common工程,这样consumer工程也就可以通过nacos的注册中心找到这个接口名,然后通过spring的invoke来对于远程的用于具体实现service逻辑的xxxServiceImpl类进行调用了。具体业务逻辑实现类,ProductServiceImpl该类做这么一件事:1)插入t_product表数据2)插入t_stock表数据插两张表时,只要有一点点错误那么整个插入事务回滚,否则成功。这边需要注意的就是:springboot service只有接到RuntimeException才会回滚;要把RuntimeException从provider远程传递到consumer端,包括把stackTrace这些信息也远程传递到consumer端,那么这个exception必须是serializable的;暴露成dubbo provider service的service方法必须加上@Service注解,这个Service可不是spring annotation的service而是ali dubbo的service,在2.7.3开始变成了org.apache.dubbo包了。它配合着springboot的主启动文件中的@EnableDubbo来启作用,它在启动后会通过application.properties中的免费云主机域名dubbo.scan.base-packages中所指的路径把这个路径下所有的类寻找是否带有@Service注解,如有那么就把它通过nacos-registry给注册到nacos中去;ProductServiceImpl.java

相关推荐: python如何流式读取大文件

这篇文章将为大家详细讲解有关python如何流式读取大文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何流式读取大文件使用with…open…可以从文件中读取数据,这是所有Python开发人员都非常熟悉的操作。但是,如果…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/30 19:03
下一篇 03/30 19:03

相关推荐