Dubbo是阿里巴巴SOA服务化治理方案的核心框架,是一个分布式服务框架,致力于提高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
SOA思想:面向服务的框架,给每一个模块暴露对应的ip和端口,当做一个服务进行运行重点在于服务的管理(负载均衡,容灾模式,服务的横向扩展),应用SOA的:webServices、dubbo、springCloud:微服务框架
ps:学习SpringCloud进度:spring2-->spring3-->spring4-->springboot-->springCloud
RPC:https://blog.csdn.net/wangyunpeng0319/article/details/78651998
Dubbo核心:
· 远程通信:提供对多种基于长连接的NIO框架的抽象封装,包括多种线程模型、序列化、以及“请求-响应”模型的信息交换方式。
· 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
· 自动发现:基于注册中心目录服务,是服务消费方能动态的查找服务提供方,使地址透明,是服务提供方可以平滑增加或减少机器。
举例:
单一应用架构:基础的用户管理系统,单表的增删改查操作。
垂直应用架构:利用目前掌握的常用MVC框架操作不是太复杂的表。
分布式服务架构:将每一个功能创建一个项目。例如用户一个工程,轮播图一个项目。相互调用需要暴露接口和端口号
流动计算架构:加入用户特别多的话,也可以将用户模块拆分成多个项目,相互调用需要暴露接口和端口号
把项目中的每一个模块,拆分成若干个应用,通过服务的方式进行暴露,如果涉及到相互通信,通过RPC调用。
Provider:提供者,就是自己写的服务器端
Consumer:消费者,就是客户端,调用服务方法,意思为消费提供端提供的方法
Registry:注册中心:消费端和提供端的构建桥梁,提供端的信息会在注册中心做一个记录,消费端从注册中心拿数据,在远程调用,
Monitor:监听,看看调用服务多少次
入门案例:
工具:MyEclipse和linux系统上搭建的zookeeper
1、jar包
2、项目一:testdubbo_p(提供端)
2.1.1 配置文件:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<import resource="dubbo_p.xml"></import>
</beans>
2.1.2 配置文件2:dubbo_p.xml 头标签一样的
<!-- 配置应用名 -->
<dubbo:application name="testdubbo_p"></dubbo:application>
<!-- 指定注册中心 -->
<dubbo:registry protocol="zookeeper" address="192.168.10.120:2181"></dubbo:registry>
<!-- <dubbo:registry address="multicast://224.5.6.7:1234"></dubbo:registry> -->
<!--指定服务提供者的端口和协议 -->
<dubbo:protocol name="dubbo" port="9991"></dubbo:protocol>
<!-- 暴露服务 -->
<dubbo:service interface="com.services.UserService" ref="userService"></dubbo:service>
<bean id="userService" class="com.services.UserServiceImpl"></bean>
2.2 写一个com.services.UserService接口
public interface UserService {
public void insertUser(Integer id,String name);
public String queryById(Integer id);
public List<String> queryAll();
}
2.3 实现
public class UserServiceImpl implements UserService{
@Override
public void insertUser(Integer id, String name) {
System.out.println("insert"+id+"-----"+name);
}
@Override
public String queryById(Integer id) {
System.out.println("querybyid"+id);
return id+"aaaa";
}
@Override
public List<String> queryAll() {
System.out.println("queryall");
return Arrays.asList("zxcv","bnm");
}
}
2.4 测试
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("conf/applicationContext.xml");
System.out.println("项目启动完成");
//System.in返回的是InputStream指向命令行输入的字节流,它的read方法以字节流的方式来读取命令行的输入的数据。
System.in.read();
}
获得容器,保证服务在main下活着就行
3、项目二:testdubbo_c (消费端)
3.1 配置文件:dubbo_c.xml
<!-- 配置应用名 -->
<dubbo:application name="testdubbo_c"></dubbo:application>
<!-- 指定注册中心 -->
<dubbo:registry protocol="zookeeper" address="192.168.10.120:2181"></dubbo:registry>
<!-- <dubbo:registry address="multicast://224.5.6.7:1234"></dubbo:registry> -->
<!--指定服务提供者的端口和协议 -->
<dubbo:reference id="userService" interface="com.services.UserService"></dubbo:reference>
3.2 接口
如上,包名接口名需要相同
-----
3.3 jar包也是一样的
3.4 测试
public static void main(String[] args) {
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("conf/applicationContext.xml");
UserService userService = ac.getBean("userService",UserService.class);
//userService.insertUser(8, "name");
userService.queryById(1);
}
ps:zookeeper需要在linux系统上安装,并开启
./bin/zkServer.sh start /usr/zookeeper-3.4.8/conf/zoo.cfg
和
./bin/zkServer.sh start
效果一样
然后
[root@lucktomcat zookeeper-3.4.8]# ./bin/zkCli.sh -server 192.168.10.120:2181