ITKeyword,专注技术干货聚合推荐

注册 | 登录

远程服务调用 Dubbo分布式框架

qq_28334711 分享于 2016-08-04

推荐:分布式服务框架DUBBO(一)DUBBO简介

好久都没有更新自己的blog了,加班多了,事情多了。每天回到自己蜗居的小房子都已经深夜10点多,加上自己最近身体确实不太好,总之,借口多了很多。开头废话不能

Dubbo

一、Dubbo介绍

Dubbo 是一个分布式服务框架,用于提高性能和透明化的RPC远程服务调用。
为什么要用Dubbo
最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间的解耦合,或者最大限度的分耦合。

这里写图片描述

原理:首先有个服务器,提供注册服务,称之为注册中心。
服务提供方连接注册中心,将对应的服务配置到注册中心中。
服务消费方连接到注册中心,通过注册中心,调用服务提供方提供的方法或服务。
注册中心使用的软件:zookeeper和redis ,官方推荐使用zookeeper

二、注册中心搭建

本次教程时搭建单机版的zookeeper
使用CentOS 6.5系统

1、将zookeeper-xxx.tar.gz上传到虚拟机

2、解压到/usr/local文件夹中
tar -zxvf zookeeper-xxx.tar.gz -C /usr/local/zookeeper

3、进入/usr/local/zookeeper 目录
cd /usr/local/zookeeper

4、创建data目录,用于存储数据,创建logs目录,用于记录日志
mkdir data logs

5、进入conf目录
cd conf

6、复制zoo_sample.cfg 并命名为zoo.cfg,因为系统默认时读取的zoo.cfg配置文件
cp zoo_sample.cfg zoo.cfg

7、编辑zoo.cfg 文件。配置数据存储目录,以及日志存储目录
vim zoo.cfg

dataDir=/usr/local/zookeeper-3.4.6/data/

logDir=/usr/local/zookeeper-3.4.6/logs/

8、进入bin目录,启动zookeeper服务

cd bin
启动服务 ./zkServer.sh start
查看服务状态: ./zkServer.sh satus

## 三、配置服务提供方
1、配置dubbo-provider.xml文件。
步骤:
第一步:配置服务方名称
第二步:连接注册中心
第三步:配置提供方,ip以及端口
第四步:配置对外提供的接口

推荐:基于Dubbo框架构建分布式服务(顶)

http://shiyanjun.cn/archives/1075.html

<?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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!--配置服务提供方名称-->
    <dubbo:application name="sport-service-product"/>
    <!-- 连接zookeeper注册中心 192.168.200.128:2181 -->
    <dubbo:registry address="192.168.200.128:2181" protocol="zookeeper"></dubbo:registry>
    <!-- 对外提供服务的端口号 默认20880 -->
    <dubbo:protocol host="127.0.0.1" port="20880"></dubbo:protocol>
    <!-- 对外暴露的接口 ref为接口对应的实现类 -->
    <dubbo:service interface="cn.lx.sport.service.TestService" ref="testService"></dubbo:service>


</beans>

接口代码

public interface TestDao {
    void insert(TestS ts);
}

实现类代码

@Service("testService")
@Transactional
public class TestServiceImpl implements TestService{
    @Autowired
    private TestDao testDao;

    @Override
    public void insert(TestS ts) {
        // TODO Auto-generated method stub
        testDao.insert(ts);
        int i =10/0;
    }

}

## 四、配置服务消费方
1、配置消费方配置文件 dubbo-customer.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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
        <!-- 配置dubbo消费方 -->
        <!--配置消费方名称 -->
        <dubbo:application name="sport-console"/>
        <!--注册zookeeper 连接 192.168.200.128:2181 -->
        <dubbo:registry address="192.168.200.128:2181" protocol="zookeeper"></dubbo:registry>
        <!-- 获取服务 id值 必须和服务方提供的id值一致 也即服务方配置ref一致,才能注入成功 -->
        <dubbo:reference interface="cn.lx.sport.service.TestService" id="testService"></dubbo:reference>
</beans>

注意:接口为公共接口,必须在服务方和消费方的项目中都要有,而服务方中给出具体的实现类。

Controller代码

@Controller
public class TestController {
    //自动注入远程调用的接口实现类
    @Autowired
    private TestService testService;
    @RequestMapping("test")
    public String test(){
        TestS ts = new TestS();
        ts.setName("范冰冰2");
        ts.setSex("女");
        testService.insert(ts);
        return "test";
    }
}

因为POJO类要进行传输,所以一定要实现Serializable,代码如下:

public class TestS implements Serializable{
    /** * */
    private static final long serialVersionUID = 3982580692962054581L;
    private Integer id;
    private String name;
    private String sex;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
}

注意:启动服务时,首先要启动服务提供方,再启动服务消费方,否则会报异常

五、Dubbo优化

1、连接超时问题解决

在开发过程中,由于要使用调试模式,人为控制程序的执行顺序,会导致程序的执行时间延长,而Dubbo中,默认服务消费方连接服务的超时时间为10ms,时间过多,会影响我们的调试,为了解决这个问题,可以在服务消费方的dubbo的配置文件中,配置超时时间,配置方式如下:
<!-- 配置全局超时时间 默认单位为ms-->
<dubbo:consumer timeout="600000" ></dubbo:consumer>

2、消费方连接检查服务提供方问题

按照现在的配置,启动服务器时,我们每次都需要先启动服务提供方,才能启动服务消费方,否则会报无法连接异常,操作起来较为繁琐,我们可以通过配置文件来让消费方在启动服务时,不自动检查服务提供方,具体配置如下:
<!-- 配置全局超时时间-->
<dubbo:consumer timeout="600000" check="false"></dubbo:consumer>
check=false 

需要注意,如果服务消费方配置了log4j,依然会提示报错,但是不影响服务器的运行。

3、消费方直连方式连接服务方

在开发中,如果都是通过注册中心进行连接,需要一直开启注册中心服务,如果电脑配置相对较差的话,可能较为卡顿,可以 使用消费方直连方式连接服务方。而且配置相对较为简单。

服务方配置

<dubbo:registry address="N/A" protocol="zookeeper"></dubbo:registry>

<!-- 对外提供服务的端口号 默认20880 -->
<dubbo:protocol host="127.0.0.1" port="20880"></dubbo:protocol>

消费方配置

<!-- 配置直连服务方,则不连接注册中心 -->
<dubbo:registry address="N/A"></dubbo:registry>
<!--使用直连时,需要配置一个url属性-->
<dubbo:reference interface="cn.lx.sport.service.product.BrandService" id="brandService" url="dubbo://127.0.0.1:20880" ></dubbo:reference>

推荐:分布式服务框架DUBBO(二)搭建dubbo服务-zookeeper与dubbo-admin的安装

大家应该还记得在上篇博客中,那张用来解释整个dubbo原理的图。图中分别存在register和monitor,这次主要介绍的就是这两个部分的环境搭建。 zookeeper作为整个服

Dubbo 一、Dubbo介绍 Dubbo 是一个分布式服务框架,用于提高性能和透明化的RPC远程服务调用。为什么要用Dubbo最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间的解耦合,或者

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。