Dubbo笔记1

一、介绍

1、传统项目的问题

  1. 如果使用HttpClient的方式实现请求的跨域.需要频繁的对象的转化.
  2. 业务层的代码需要编辑多层 5层结构.
  3. 当HttpClient调用时返回值解析比较繁琐
  4. 使用HttpCient方式进行Post提交的方式安全性不好.

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

猜你喜欢

转载自blog.csdn.net/qq_24271537/article/details/81394414