一、序言
现在互联网应用很多,每个应用又以服务的形式提供给其他应用,这样颗粒度比较细,相互影响就会减低,因此提供了很多SOA 的一些RPC的框架,比如:dubbo 、webservice、GRPC、dubbo、commonRPC等,这里先提供一个dubbo 的实例。
二、dubbo 基本工作原理
来源:http://alibaba.github.io/dubbo-doc-static/Home-zh.htm
1.原理图:来自网络
从上图我们可以看出
1:register 注册到服务中心 Registry
2.consumer 消费者在服务中心订阅服务,
3.注册中心将服务信息返回给消费者
4.消费者根据3返回的地址等信息,调用服务
5.monitor 监控双方的调用次数、时间 等情况。
三、场景模拟
场景:A系统提供登录服务,然后B系统依赖A系统登录
1.A提供一个需要暴露接口,这里未了打成jar 方便,会单独放在一个工程
/**
* 用户登录接口
* Created by qiqiang on 2015/3/12.
*/
public interface IUserService {
public boolean login(String name,String password);
}
2.A 的实现类,在主工程里面
/**
* Created by qiqiang on 2015/3/12.
*/
public class UserServiceImpl implements IUserService{
@Override
public boolean login(String name, String password) {
if("admin".equals(name) && "123".equals(password)){
return true;
}
return false;
}
}
四、配置及测试
1.A主工程 dubbo 配置
<!-- 应用名字 -->
<dubbo:application name="user-service"/>
<!-- 服务中心用ZK,方便管理。这里用的本地伪集群, -->
<dubbo:registry protocol="zookeeper" address=" localhost:2181,localhost:2182,localhost:2183" />
<!-- 本地端口 -->
<dubbo:protocol name="dubbo" port="30000"/>
<!-- 暴露的接口 -->
<dubbo:service interface="crm2.IUserService" ref="userServiceImpl" timeout="10000" version="1.0"/>
<!-- 本地实现类 -->
<bean id="userServiceImpl" class="com.raycloud.dubbo.service.UserServiceImpl"/>
关于zookeeper 的安装参考:
http://greemranqq.iteye.com/blog/2171449
2.模拟A 工程启动。
public class SpringDubboTest {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/dubbo/dubbo-provider.xml");
context.start();
System.in.read();
}
}
3.B工程配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 消费者 应用名字,和提供者一样,ZK不好区分 -->
<dubbo:application name="consumer-user-service"/>
<!-- ZK必须是共享的 -->
<dubbo:registry protocol="zookeeper" address=" localhost:2181,localhost:2182,localhost:2183" />
<!-- 刚才的接口 -->
<dubbo:service interface="crm2.IUserService" id="userServiceImpl" version="1.0" />
</beans>
4.B工程调用实例
public class DubboTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-customer.xml");
IUserService service = (IUserService)context.getBean("userServiceImpl");
// 执行远程方法
System.out.println(service.login("admin","123"));
}
}
关于ZK的监控,要么自己写,要么用网上的插件 都可以的
小结:
1.zk 和 dubbo 的安装直接看官网就行了,这里只是基本代码,还有一些复杂的东西也直接看官网吧。
2.现在RPC 框架比较多,基本能满足大部分要求的,实在不够的可以像当当那样改dubbo->dubbox,或者尝试一下其他版本,当然底层功底好可以自己写,还得看需求。
3.这些东西都是结合一些小的场景写的,有问题请指出,感谢
参考:
http://www.tuicool.com/articles/yma6R3u
duboo 设计的介绍
http://shiyanjun.cn/archives/325.html