本文目录一览:
为什么dubbo的java project需要两个
一个是生产者,一个是消费者。生产者就是提高dubbo服务的工程。消费者就是一个web项目,然后这个项目中对业务数据的增删改查都是去调用的生产者工程上的dubbo服务。这样可以有多个web项目去调用生产者上面的dubbo服务。从而实现了对业务处理代码的集中管理和重复利用。
JAVA分布开发dubbo问题
首先要搞清楚三者的概念
1、Dubbo是阿里开源的默认基于TCP协议RPC远程服务调度框架,简单理解就是服务A使用TCP协议调用服务B的Dubbo接口。
2、Zookeeper是注册中心,在这里主要用于管理dubbo服务提供者和消费者的注册信息与服务调度时提供相关依据。
3、Tomcat是WEB应用服务器,可以对外暴露基于HTTP协议的服务接口。
由于用户访问你的应用首先是通过浏览器,也就是基于HTTP协议,所以必须对外暴露HTTP接口作为入口,那么就需要使用WEB应用服务器,比如Tomcat、Jetty、Undertow等等。
关于不启动tomcat,需要哪些配置的问题如下:
Dubbo支持HTTP协议,但原理任然是通过WEB应用服务器暴漏一个端口。从Dubbo本身专注的领域来说,不建议用HTTP协议,所以最终的结论是,服务与服务之间的接口调用使用Dubbo,而对外暴露HTTP接口任然使用WEB应用服务器。
从零开始认识Dubbo
[TOC]
1.Dubbo是什么
Apache Dubbo 是一款高性能Java RPC框架。
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东, 说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册) 其核心部分包含:
2.Dubbo能做什么
Dubbo采用全spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
3.Dubbo架构
节点角色说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
调用关系说明:
4.Dubbo的使用方法
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。如果不想使用Spring配置,可以通过API的方式进行调用(注解式,不推荐使用)
下载安装zookeeper注册中心(不建议使用multicast)
1.Windows
下载地址:
使用方法:下载解压即可,进入解压目录运行zkServer.cmd启动注册服务中心
截图:
2.MacOS
下载地址:
使用方法:下载解压即可,进入解压目录运行zkServer.sh start启动注册服务中心
3.Linux
下载地址:
使用方法:下载解压即可,进入解压目录运行zkServer.sh start启动注册服务中心
服务提供者
1.定义服务接口(该接口需单独打包,在服务提供方和消费方共享)
DemoService.java
2.服务提供方实现接口:(对服务消费方隐藏实现)
DemoServiceImpl.java
dubbo-provider.xml:
4.加载Spring配置,启动服务:
Provider.java:
或者使用springBoot启动
服务消费者:
applicationContext-dubbo.xml 中注册自己需要调用的接口。
1.通过Spring配置引用远程服务
dubbo-consumer.xml:
2.加载Spring配置,并调用远程服务:
Consumer.java
或者使用springBoot启动
并添加对应的restful接口提供接口访问
修改对应index页面
3.dubbo管理页面:
启动后访问
输入账号密码root/root
应用页面:
提供者页面:
消费者页面:
服务页面:
测试是否成功,只要看状态是否正常,就ok了 ....
provider-log:
5.使用Dubbo可能遇到的问题
1、org.springframework.beans.factory.BeanCreationException
原因分析:
解决方案
2、org.apache.dubbo.rpc.RpcException
原因分析
解决方案
可能是因为providers没有启动,或者是provider对应暴露的服务被禁用,启动providers或者解除禁用即可
3、java.lang.IllegalStateException
原因分析
解决方案
总结以上两点,通俗点讲,就是重启了工程(可能是因为直接修改代码,工程reload了), 并且,连过了数据库(登录等),才出现了上述报错信息。原因是因为在tomcat重启的时候,之前的tomcat的线程还没有完全关闭,最新启动tomcat就会报这个异常。
4、org.apache.dubbo.remoting.TimeoutException
原因分析
解决方案
在dubbo-provider.xml增加超时时间
dubbo java环境下出现这种错误怎么解决?
往service里注入失败了。
改成:ref="CarServiceImpl"
Dubbo分布式服务框架 服务注册不上:
(1) 检查dubbo的jar包有没有在classpath中,以及有没有重复的jar包
(2) 检查有没有重复的dubbo.properties配置文件
(3) 检查暴露服务的spring配置有没有加载
(4) 检查beanId或beanName有没有重复
(5) 查看有没有错误日志:
cat ~/output/logs/webx.log
(6) 在服务提供者机器上测试与注册中心的网络是否通:
telnet 172.22.3.94 9090
(7) 检查与注册中心的连接是否存在:
netstat -anp | grep 172.22.3.94
(8) 如果是预发布机,检查hosts文件有没有正确绑定:
cat /etc/hosts
(9) 实在不行,开启远程调试:
– (a) 在服务器JVM参数中加入:-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=7001,server=y,suspend=y
注意线上只有7001和8080可以被线下访问,调试端口需用这两个之一,因注册是启动时行为,启动时必需挂起suspend=y
– (b) 在dubbo源码的DefaultRegistryService的registerService()方法中设置断点。
– (c) 在Eclipse的Debug按钮下拉菜单Debug Configurations中的Remote Java Applications中新增远程调试,并设置IP和端口,以及增加dubbo的源码,进行远程Debug调试。