【Dubbo篇】--Dubbo框架的使用

一、前述

Dubbo是一种提供高性能,透明化的RPC框架.是阿里开源的一个框架。

官网地址:http://dubbo.io/

二、架构

组件解释:

Provider: 提供者.发布服务的项目. Registry: 注册中心.所有提供者必须去注册中心注册自己所有能发布的服务. Consumer: 消费者.调用服务的项目. Monitor: 监控中心.监控消费者和提供者调用服务的时间及次数.默认每1分钟向监控中心生成一次统计数据.之间调用必须遵守Dubbo支持的协议. Container:容器.Dubbo依赖于Spring容器.

执行顺序: 0:由Spring容器启动服务. 1 向注册中心注册服务. 2 消费者向注册中心订阅需要调用的服务.在注册中心的服务列表中寻找需要调用的服务.获取到提供者真实地址. 3 注册中心通知消费提供者的真实地址.如果提供者的服务发生变化,注册中心会自动推送信息给消费者. 4 消费者调用提供者的服务. 5 在调用过程中向监控中心发送数据,进行统计调用时间和调用次数. 6 虚线都是异步请求,实线都是同步请求.

三、Dubbo支持的注册中心

1.Zookeeper注册中心 1.1 优点:支持集群. 1.2 缺点:稳定性受Zookeeper影响. 2.Redis注册中心 1.1 优点:基于服务器双写模式.性能高. 1.2 缺点:要求服务器时间必须一致. 3.Multicast注册中心 3.1 免中心化的注册中心,不需要额外安装软件. 3.2 不支持集群. 4.Simple注册中心 4.1 适用于测试环境的.

四、Dubbo支持的几种协议

1. Dubbo 1.1 基于NIO的协议.性能比较高 1.2 缺点:在单一连接时,传输大文件可能出错. 2.RMI 2.1 RMI是JDK提供的.可以和原生RMI互用. 2.2 缺点:可能出现连接无效情况. 3.Hession 3.1 第三方的Hession.jar 3.2 缺点:短连接性能低.

五、Zookeeper简介

1.分布式协调组件(就是一个软件.) 2.好处: 2.1 高效性 2.2 可扩展性. 3.作用: 3.1 服务发布和订阅(注册使用这个特性) 3.2 集群管理功能(SolrCloud使用这个特性) 3.3 负载均衡 3.4 分布式锁 4.使用java语言编写.

六.使用Maven发布服务的步骤

1.创建dubbo-service项目,只写接口 2.创建dubbo-service-impl项目,需要依赖dubbo-service 3.在pom.xml配置,导入dubbo.jar和zkClient.jar 3.1 <exclusions>不导入哪个依赖包 3.2 spring-context:我们使用的spring版本 3.3 zkClient:连接Zookeeper的客户端工具包 3.4 dubbo: dubbo框架的包

<dependencies>
        <dependency>
            <groupId>com.bjsxt</groupId>
            <artifactId>dubbo-service</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>

  4. 在resources下新建spring配置文件   <beans>可以在dubbo-master.zip\dubbo-master\ dubbo-admin\ src\main\resources\META-INF\spring里面复制

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    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://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd
        http://code.alibabatech.com/schema/dubbo 
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!-- 在监控中心/admin管理界面中看是哪个项目 -->
    <dubbo:application name="dubbo-service-impl"/>
    <!-- 配置注册中心 -->
    <dubbo:registry protocol="zookeeper" address="192.168.92.130:2181"></dubbo:registry>
    <!-- 配置协议 -->
    <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
    <!-- 注解扫描 -->
    <dubbo:annotation package="com.bjsxt.service.impl"/>
</beans>

5.编写服务实现类

5.1 @Service是Dubbo的注解

import com.alibaba.dubbo.config.annotation.Service;
import com.bjsxt.service.DemoService;

@Service
public class DemoServiceImpl implements DemoService {
    @Override
    public String test(String name) {
        return "传递过来的内容:"+name;
    }
}

七.使用Maven创建Consummer项目

 1.保证Consummer项目中服务方接口 1.1 需要知道服务方接口名称及方法名 2.创建Maven projec,配置pom.xml 2.1 依赖的dubbo-service可以从svn上下载.

<dependencies>
        <dependency>
            <groupId>com.bjsxt</groupId>
            <artifactId>dubbo-service</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>

 3.编写spirng配置文件 3.1 application需要自定义名称 3.2 扫描自己项目中ServiceImpl的@Reference注解

    <!-- 在监控中心/admin管理界面中看是哪个项目 -->
    <dubbo:application name="dubbo-consummer"/>
    <!-- 配置注册中心 -->
    <dubbo:registry protocol="zookeeper" address="192.168.92.130:2181"></dubbo:registry>
    <!-- 配置协议 -->
    <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
    <!-- 注解扫描,扫描@Reference注解 -->
    <dubbo:annotation package="com.bjsxt.service.impl"/>

4.编写Service实现类代码 4.1 @Service 把类交给Spring容器 4.2 @Reference给接口注入对象.对象信息从注册中心获取.

import org.springframework.stereotype.Service;
import com.alibaba.dubbo.config.annotation.Reference;
import com.bjsxt.service.DemoService;
import com.bjsxt.service.MyService;

@Service
public class MyServiceImpl implements MyService {
    @Reference
    private DemoService demoService;
    @Override
    public void test() {
        String result = demoService.test("张三");
        System.out.println(result);
    }
}

5、编写测试代码:

public class Test {
    @SuppressWarnings("resource")
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-consummer.xml");
        MyServiceImpl bean = ac.getBean("myServiceImpl", MyServiceImpl.class);
        bean.test();
    }
}

八.Admin管理界面 1.本质:web项目,war打包项目 2.直接把dubbo-admin-2.5.3放入到tomcat(linux/window都可以)中 3.启动tomcat. 4.关闭tomcat. 5.删除dubbo-admin-2.5.3.war 5.1 防止下次启动tomcat后重新解压,导致修改内容无效 6.进入解压后文件夹dubbo-admin-2.5.3/WEB-INF/中修改dubbo.properties文件 6.1 第一行为注册中心地址 6.2 第二行是管理员用户名和密码 6.3 第三行是游客的用户名个和密码

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员宝库

Linux 基础:文件查找 find

在linux的日常管理中,find的使用频率很高,熟练掌握对提高工作效率很有帮助。 find的语法比较简单,常用参数的就那么几个,比如 -name、 -type...

3406
来自专栏北京马哥教育

Python爬虫基础知识:urllib2的使用技巧

糖豆贴心提醒,本文阅读时间6分钟 前面说到了urllib2的简单入门,下面整理了一部分urllib2的使用细节。 1.Proxy 的设置 urllib2 默认...

3075
来自专栏IMWeb前端团队

解放双手:如何在本地调试远程服务器上的Node代码

写在前面 谈到node断点调试,目前主要有三种方式,通过node内置调试工具、通过IDE(如vscode)、通过node-inspector,三者本质上差不多。...

5048
来自专栏IT 指南者专栏

【SSH框架】之Struts2系列(二)

微信公众号:compassblog 欢迎关注、转发,互相学习,共同进步! 有任何问题,请后台留言联 1、Struts2常量配置 (1)、Struts2默认常量配...

33812
来自专栏用户2442861的专栏

HTTP POST GET 本质区别详解

    一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交

3062
来自专栏程序员阿凯

一条大河波浪宽 -- 数据库连接池实现

1154
来自专栏Petrichor的专栏

环境变量

比如下列命令会将提示符修改成字符串 “Hello,My NewPrompt :) ” :

1922
来自专栏iKcamp

系列3|走进Node.js之多进程模型

文:正龙(沪江网校Web前端工程师) 本文原创,转载请注明作者及出处 之前的文章“走进Node.js之HTTP实现分析”中,大家已经了解 Node.js 是...

4337
来自专栏PHP在线

PHP使用SOAP调用.net的WebService问题

项目的需求,需要和一个.net系统进行数据交换,合作方提供了一个WebService接口。这个与一般的PHP POST或GET传值再查库拿数据的思路有点不一样,...

3826
来自专栏程序员宝库

Linux 基础:文件查找 find

在linux的日常管理中,find的使用频率很高,熟练掌握对提高工作效率很有帮助。 find的语法比较简单,常用参数的就那么几个,比如 -name、 -type...

37813

扫码关注云+社区

领取腾讯云代金券