项目结构如下:
web 项目名
-- server sercice 层
-- web controller 层
transfer_server
-- transferCore dao 接口
-- transferServer
transfer_api POJO 类,工具类
web 作为 consumer,transfer_server 作为 provider,用 dubbo 做服务注册发现,多个 web 项目调用 transfer_server
transfer_server 项目中 dubbo-provider.xml 中只暴露一个接口,配置如下:
<!-- Api 服务 Service -->
<dubbo:service interface="com.iyunche.transfer.api.server.TransferInvoker"
ref="transferInvoker" owner="owner1" version="${dubbo.service.versions}"
delay="${dubbo.service.delay}" timeout="${dubbo.service.delay}"
retries="${dubbo.retries}"/>
web 项目中 dubbo-consumer.xml 配置如下
<!--==================== transferApiInvoker =============== -->
<dubbo:reference id="transferApiInvoker" check="${dubbo.is_check}"
interface="com.iyunche.transfer.api.server.TransferInvoker" version="${dubbo.service.versions}"
timeout="${dubbo.service.delay}" />
分割线
1、问题一:在 dubbo 配置文件中只暴露一个接口有什么优缺点?
web 项目中接口调用方式如下:
transferInvoker.invokeObject("logisticsOrderService#getLogisticsOrderById", logisticsId);
transfer_server 通过反射找到接口和实现类
目前我知道的好处是不用每次都配置 dubbo 配置文件,但是在 dubbo 监控中心里监控接口调用次数等功能全部失效。
2、问题二:项目分层问题
目前项目中 controller 层和 service 层在同一个项目,在 service 层做业务逻辑,然后通过 dubbo 调用 transfer_server,transfer_server 中直接调用 dao 层。
依我的看法是项目中 controller 层封装完数据之后,通过 dubbo 调用 transfer_server,在 transfer_server 中处理业务逻辑,复用 transfer_server 中的方法
组长说在项目中 controller 层封装数据,service 层处理业务逻辑,之后通过 dubbo 调用 transfer_server,会在 transfer_server 中写通用的业务逻辑,达到复用的目的,然后调用 dao 层
但是我看来目前 transfer_server 什么都没做,直接调用 dao 层,transfer_server 中方法的复用其实就是 dao 层接口的复用,transfer_server 相当于鸡肋,方法复用性很小
求大家指教,谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.