应用——dubbo的基本使用

一、背景

dubbo是个什么?

首先要说的是,网上有很多高大上的回答,可自行百度,这里只说一些非常狭隘的东西:

dubbo是一个分布式服务框架,我们一般用它进行远程方法调用。(分布式、远程方法调用下面有注释)

ok,狭隘的东西回答完毕(下面注释也是狭隘的)~~~

分布式:将一个功能分成多个小模块,交由不同服务器处理,整合得到最终结果。

远程方法调用:RMI,可像本地调用一样调用其它系统的功能

二、适用场景

供应商各子系统间的相互调用

三、服务端配置

1、实现提供远程方法调用的类

接口类

public interface ICompanyService {

    /**
     * 检测公司是否存在:根据公司名称检测CRM系统中公司是否存在
     */
    boolean checkCompanyExist(String companyName) throws Exception;

}

实现类

public class CompanyServiceImpl implements ICompanyService {

    /**
     * 检测公司是否存在:根据公司名称检测CRM系统中公司是否存在
     */
    @Override
    public boolean checkCompanyExist(String companyName) throws Exception {
        return false;
    }

}

2、在pom.xml增加dubbo所需jar包

        <!-- Dubbo Jar包引入 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.4.9</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <!-- zookeeper 引入 -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.5</version>
            <exclusions>
                <exclusion>
                    <artifactId>jmxtools</artifactId>
                    <groupId>com.sun.jdmk</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jmxri</artifactId>
                    <groupId>com.sun.jmx</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jms</artifactId>
                    <groupId>javax.jms</groupId>
                </exclusion>
            </exclusions>
        </dependency>

3、增加dubbo配置文件dubbo.xml

<?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服务器端配置文件 -->
    <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="dubbo-crm-service" />
    <!-- 使用zookeeper注册中心,暴露服务地址 -->
    <dubbo:registry protocol="zookeeper" address="${zookeeper.url}" />
    <!-- 用dubbo协议在20883端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20883" />

    <!-- 声明需要暴露的服务接口及接口实现 -->
    <!-- 公司自助注册接口 ,用户验证、权限接口 -->
    <dubbo:service interface="com.glodon.crm.dubbo.service.ICompanyService"
        ref="crmCompanyService" />
    <bean id="crmCompanyService" class="com.glodon.crm.dubbo.service.impl.CompanyServiceImpl" />

</beans>

4、在web.xml中加载dubbo的配置文件

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:applicationContext.xml,classpath*:dubbo.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

5、导出远程方法调用的接口为jar包

eclipse中选中接口文件,右键 - Export - 选中java下的JAR file - 选择保存路径,输入jar包名称,点击Finish

四、客户端配置

1、在pom.xml增加dubbo所需jar包,和服务端提供的接口jar包(略)

2、增加dubbo配置文件dubbo.xml

<?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服务器端配置文件 -->
    <!-- 消费方应用信息,用于计算依赖关系 -->
    <dubbo:application name="gcxx_consumer" />
    <!-- 使用zookeeper注册中心,获取服务地址 -->
    <dubbo:registry protocol="zookeeper" address="${zookeeper.url}" />
    <!-- dubbo端口 -->
    <dubbo:protocol name="dubbo" port="20880" />

<!-- 生成远程服务代理,可以像使用本地bean一样使用companyService -->
    <dubbo:reference id="companyService" interface="com.glodon.crm.dubbo.service.ICompanyService" check="false"/>
</beans>    

3、在web.xml中加载dubbo的配置文件(略)

4、在程序中调用远程方法,要注意spring注入的远程接口类的对象名要和上方dubbo:reference的id相同

public class Test {
    @Autowired
    ICompanyService companyService;

    public void test(){
        try {
            companyService.checkCompanyExist("test");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

五、直连服务提供方

开发时会碰到开发期间多个服务提供方中只有一个是自己要调的,而上述配置中dubbo的调用近乎随机,不能调到自己想调的服务方

这时,调整dubbo配置文件为ip直连即可

    <!-- 生成远程服务代理,可以像使用本地bean一样使用companyService -->
    <dubbo:reference id="companyService" interface="com.glodon.crm.dubbo.service.ICompanyService" check="false" url="172.16.231.230:20883"/> 
时间: 2024-08-28 18:35:08

应用——dubbo的基本使用的相关文章

Dubbo

Dubbo Duboo是什么 DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点.可以看出在阿里内部广泛应用,类似的还有Spring Cloud. 准备工作 准备两虚机,我这里用了CentOS7.2,加上本机可组成多提供者和消费者(当然一个虚机和不用虚机也可以)我准备的两台IP为:192.168.124.129(用于

阿里巴巴Dubbo实现的源码分析[转]

阿里巴巴Dubbo实现的源码分 1.      Dubbo概述 Dubbo是阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及作为SOA服务治理的方案.它的核心功能包括: #remoting:远程通讯基础,提供对多种NIO框架抽象封装,包括"同步转异步"和"请求-响应"模式的信息交换方式. #Cluster: 服务框架核心,提供基于接口方法的远程过程调用,包括多协议支持,并提供软负载均衡和容错机制的集群支持. #regist

dubbo框架----探索-大型系统架构设计(图解)

对于高并发系统的架构要求: 1. 负载均衡 2.高并发 3.高可用 4.面向服务架构 (Dubbo框架使用) 5.分布式缓存 (redis分布式缓存) 6.分布式全文检索 (solr分分布式全文检索) 7.分布式数据库集群 (mycat 集群mysql数据库) dubbo  简介 系统架构 redis 集群 solr 集群 mysql 集群

21.dubbo脚本之dump.sh

#!/bin/bash cd `dirname $0` BIN_DIR=`pwd` cd .. DEPLOY_DIR=`pwd` CONF_DIR=$DEPLOY_DIR/conf SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'` LOGS_FILE=`sed '/dubbo.log4j.file/!d;s/.*=//' conf/dubbo.properties |

22.dubbo脚本之start.sh

#!/bin/bash cd `dirname $0` BIN_DIR=`pwd` cd .. DEPLOY_DIR=`pwd` CONF_DIR=$DEPLOY_DIR/conf SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'` SERVER_PROTOCOL=`sed '/dubbo.protocol.name/!d;s/.*=//' conf/dubbo.pro

23.dubbo脚本之stop.sh

#!/bin/bash cd `dirname $0` BIN_DIR=`pwd` cd .. DEPLOY_DIR=`pwd` CONF_DIR=$DEPLOY_DIR/conf SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'` if [ -z "$SERVER_NAME" ]; then     SERVER_NAME=`hostname` fi PID

关于dubbo的服务降级

一.dubbo降级服务     dubbo开发中,可能由于服务没有启动或者网络不通,调用中会出现RpcException,也就是远程调用失败.如果是服务启动顺序的问题,可能加工check="false"的配置可以得到很好的解决.但是,如果是服务宕掉或者并发数太高导致的RpcException该如何处理? 经过过12306抢票的人应该经常会遇到这个问题:在抢票高峰的时候,明明票还有,但是查询出来的列表却是为空的(如果没票列表也应该会呈现):等高峰过后再查询,列表又恢复正常.个人猜测应该是

基于ZooKeeper的Dubbo注册中心的简单例子

一:安装zookeeper 系统环境 Ubuntu 14.04.2 LTS x64 IP : 192.168.1.102 下载zookeeper-3.4.6.tar.gz到目录/opt,解压 mkdir /opt/zookeeper-3.4.6/data vim /opt/zookeeper-3.4.6/conf/zoo.cfg 输入如下内容 tickTime=2000 dataDir=/opt/zookeeper-3.4.6/data clientPort=2181 然后,启动 sh /opt

dubbo之令牌验证

防止消费者绕过注册中心访问提供者 在注册中心控制权限,以决定要不要下发令牌给消费者 注册中心可灵活改变授权方式,而不需修改或升级提供者 可以全局设置开启令牌验证 <!--随机token令牌,使用UUID生成--> <dubbo:provider token="true" /> <!--固定token令牌,相当于密码--> <dubbo:provider token="123456" /> 也可在服务级别设置: <

dubbo之服务容器

服务容器是一个standalone的启动程序,因为后台服务不需要Tomcat或JBoss等Web容器的功能,如果硬要用Web容器去加载服务提供方,增加复杂性,也浪费资源. 服务容器只是一个简单的Main方法,并加载一个简单的Spring容器,用于暴露服务. 服务容器的加载内容可以扩展,内置了spring, jetty, log4j等加载,可通过Container扩展点进行扩展,参见:Container.配置配在java命令-D参数或者dubbo.properties中 Spring Contai