1、spring需要引入6个包:
(1)commons-logging-1.2.jar //日志包
(2)spring-beans-3.2.3.RELEASE.jar //bean包
(3)spring-context-3.2.3.RELEASE.jar // 容器包
(4)spring-core-3.2.3.RELEASE.jar //核心包
(5)spring-expression-3.2.3.RELEASE.jar //表达式包
(6) spring-aop-3.2.3.RELEASE.jar
备注:(1、经验证,spring最少需要引入5个包即标红的5个,和dubbo整合时需要引入 spring-aop包;2、使用【ApplicationContext ctx=new ClassPathXmlApplicationContext("spring.xml");】读取spring配置文件时就不需要在web.xml中配置监听【<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>】,二者二选一就行了,使用后者的话需要引入spring-web包)
2、使用dubbo需要引入8个包
(1)dubbo-2.5.3.jar
(2)javassist-3.18.0-GA.jar
(3)log4j-1.2.17.jar
(4)netty-3.2.5.Final.jar
(5)slf4j-api-1.7.12.jar
(6)zkclient-0.1.jar
(7)zookeeper-3.4.13.jar
3、操作步骤
备注:参考博客
(1)安装zookeeper
(2)关键代码
1、提供服务的接口
public interface DemoService {
String sayHello(String name);
}
2、接口实现类
public class DemoServiceImpl implements DemoService {
@Override
public String sayHello(String name) {
System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
return "Hello " + name + ", response form provider: " + RpcContext.getContext().getLocalAddress();
}
}
3、远程服务
public class Provider {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo-provider.xml"});
context.start();
System.out.println("----------------服务已启动,按任意键结束···········--------------------");
System.in.read(); // press any key to exit
}
}
4、用Spring配置声明暴露服务
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- provider's application name, used for tracing dependency relationship -->
<dubbo:application name="demo-provider"/>
<!-- use multicast registry center to export service
<dubbo:registry address="multicast://224.5.6.7:1234"/>-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!-- use dubbo protocol to export service on port 20880 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- declare the service interface to be exported -->
<dubbo:service interface="cn.it.jzl.dubbo.DemoService" ref="demoService"/>
<!-- service implementation, as same as regular local bean -->
<bean id="demoService" class="cn.it.jzl.dubbo.DemoServiceImpl"/>
</beans>
5、启动Consumer,调用远程服务
public class Consumer {
public static void main(String[] args) {
//测试常规服务
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("dubbo-consumer.xml");
context.start();
System.out.println("consumer start");
cn.it.jzl.dubbo.DemoService demoService =(cn.it.jzl.dubbo.DemoService) context.getBean(cn.it.jzl.dubbo.DemoService.class);
if(demoService==null){
System.out.println("没获取到对象。。。。");
}
System.out.println("consumer");
demoService.sayHello("二狗。。。。");
}
}
6、通过Spring配置引用远程服务
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-provider"/>
<!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!--使用 dubbo 协议调用定义好的 api.PermissionService 接口-->
<dubbo:reference id="permissionService" interface="cn.it.jzl.dubbo.DemoService"/>
</beans>
7、运行项目,先确保provider已被运行后再启动consumer模块