一、介绍
1、传统项目的问题
|
2、dubbo介绍:
1)RPC介绍:remote precedure call , 远程过程调用协议 , 基于网络中的HTTP协议的另一种通信协议 ; 底层实现了采用了加密的方式将数据进行传输;
2)dubbo介绍: 一个高性能的服务框架,使应用可通过高性能的RPC实现服务的输出和输入功能,可以和spring框架无缝集成 ;
a dubbo基本过程:
服务提供者先启动start,然后注册register服务。 消费订阅subscribe服务,如果没有订阅到自己想获得的服务,它会不断的尝试订阅。 新的服务注册到注册中心以后,注册中心会将这些服务通过notify到消费者。 |
3)SOA:面向服务的架构 ; 它将应用程序的不同单元(称为服务)通过这些服务之间定义的良好的接口和契约联系起来 ;
3、dubbo架构的调用流程图:
1)当客户端请求jt-web中的购物车信息时,首先通过zk查询当前有效的jt-cart服务 ;
2)zk返回给jt-web前端 一个ip地址和端口 ;
3)根据ip地址和端口号,请求后台服务器处理该业务 ;
4)当jt-web业务层处理时,调用的是接口中的方法 ;
5)当接口被调用时,通过RPC协议,找到该接口的实现类,进行处理 ;
6)当jt-cart接收到接口调用用,则完成特定业务逻辑;
7)当jt-cart完成业务是,通过rpc返回处理结果 ;
二、入门案例
1、dubbo入门案例
转https://blog.csdn.net/u012702547/article/details/77601538
1)创建一个maven工程
2)向创建好的工程中添加模块common,provider,consumer
provider作为我们的服务提供者 ; consumer作为服务消费者 ; common提供公共接口,供服务提供者和服务消费者使用;
3)向common模块中添加接口
4)在provider中实现common模块的接口
public class SayHelloImpl implements SayHello {
public String sayHello(String name) {
return "Hello "+name;
}
}
在provider的spring配置文件中暴露服务,如下:
采用dubbo的注册中心zookeeper ; 注册地址就是安装zookeeper的服务器地址 ; 然后将服务的接口和实现接口的bean暴露出来即可 ;
<?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"> <dubbo:application name="hello-world-app"></dubbo:application> <!--<dubbo:registry address="multicast://224.5.6.7:2181"/>--> <dubbo:registry address="zookeeper://192.168.248.128:2181"/> <dubbo:protocol name="dubbo" port="20880"/> <!--- 声明需要暴露的服务接口 --> <dubbo:service interface="org.sang.SayHello" ref="sayHelloImpl"/> <!--- 具体实现的bean --> <bean id="sayHelloImpl" class="org.sang.SayHelloImpl"/> </beans> |
最后采用main()将provider跑起来,如下:
public class Main {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ctx.start();
System.in.read();
}
}
现在,provider模块就算是开发完成 了 ;
5)在consumer模块中消费服务
在spring配置文件中订阅服务,如下:
首先订阅地址是zookper的地址 ; 然后注册一个sayHello的bean(服务接口),这个bean可以直接在我们的工程中使用 ;
<?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"> <dubbo:application name="consumer-of-helloworld-app"/> <!--<dubbo:registry address="multicast://224.5.6.7:2181" check="false"/>--> <dubbo:registry address="zookeeper://192.168.248.128:2181" check="false"/> <!-- 生成远程服务代理,可以像使用本地bean一样使用sayHello--> <dubbo:reference id="sayHello" interface="org.sang.SayHello" check="false"/> </beans> |
通过main方法来启动服务消费端:
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
SayHello sayHello = (SayHello) ctx.getBean("sayHello");
String s = sayHello.sayHello("张三");
System.out.println(s);
}
}
6)运行结果:
2、dubbo的优点
1)使用Dubbo的层级结构变得简单,只有controller-service-mapper ;
2)dubbo底层采用RPC的远程传输协议.传输更加的安全;
3)dubbo框架可以支持java对象的传递.(对象必须序列化) ; //TODO