【问题解决】
关于dubbo常见出错:
zookeeper端口号是否开放
zookeeper地址是否正确
一个service对应一个tomcat
springmvc.xml是否放对文件夹
web.xml不能有多余标签
【今日感悟】
Zookeeper
linux中开放zookeeper2181端口iptables -I INPUT -p tcp --dport 2181 -j ACCEPT.
在zookeeper的bin目录里启动./zkServer.sh start服务命令.
provider提供服务者
创建项目:export_company_interface编写对外发布的服务的接口
创建项目:export_company_service实现接口
导入依赖
配置web.xml监听器监听其他的spring配置文件
配置applicationContext-dubbo.xml
<!-- 应用名称:随便写(保证唯一:和项目名一致) -->
<dubbo:application name="export_company_service">
<!--qos 监控防止端口冲突-->
<dubbo:parameter key="qos.enable" value="false"></dubbo:parameter>
</dubbo:application>
<!--配置注册中心 注册中心的地址-->
<dubbo:registry address="zookeeper://192.168.12.132:2181"></dubbo:registry>
<!--
配置请求协议 此dubbo服务的请求端口和tomcat端无关,不能一致。
port(端口):dubbo的指定端口号,服务提供者的真实请求端口
-->
<dubbo:protocol name="dubbo" port="20881"></dubbo:protocol>
<!--配置dubbo服务提供者的包扫描-->
<dubbo:annotation package="cn.it.service"></dubbo:annotation>
配置事务:applicationContext-tx.xml
编写服务接口实现类,这里的@service注解是dubbo的service
@Autowired不要换成@Reference
通过main函数启动服务
public static void main(String[] args) throws IOException {
//1.加载配置文件
ClassPathXmlApplicationContext ac =
new ClassPathXmlApplicationContext("classpath*:spring/applicationContext-*.xml");
//2.启动
ac.start();
//3.输入后停止
System.in.read();
}
系统部署
dubbo传输的对象如果没有实现可序列化接口Serializable,报错:
Caused by: Serialized class Company must implement java.io.Serializable
导入依赖
配置web.xml
配置springmvc.xml
<!--SpringMVC配置-->
<context:component-scan base-package="cn.itcast.web"></context:component-scan>
<mvc:annotation-driven></mvc:annotation-driven>
<!--Dubbo配置-->
<!-- 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样 -->
<dubbo:application name="export_web_protal" />
<!-- 连接服务注册中心zookeeper ip为zookeeper所在服务器的ip地址-->
<dubbo:registry address="zookeeper://192.168.12.132:2181"/>
<!-- 开启dubbo注解扫描(@Reference注解)-->
<dubbo:annotation package="cn.itcast.web"/>
编写控制器,@Reference(retries = 0)导入service,retries:配置重试次数。