首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dubbo不得不知的知识点

Dubbo不得不知的知识点

作者头像
程序员小强
发布2019-12-16 15:58:37
5750
发布2019-12-16 15:58:37
举报

一、Dubbo 快速入门


Dubbo核心功能解释

dubbo 阿里开源的一个SOA服务治理框架,从目前来看把它称作是一个RPC远程调用框架更为贴切。单从RPC框架来说,功能较完善,支持多种传输和序列化方案。所以想必大家已经知道他的核心功能了:就是远程调用。

快速演示Dubbo的远程调用

实现步骤

  • 创建服务端项目
  • 创建客户端项目

dubbo 引入:

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.7.4.1</version>
</dependency>

dubbo 默认必填依懒:

服务端代码:

public void openServer(int port) {
    ApplicationConfig config = new ApplicationConfig();
    config.setName("simple-app");
    ProtocolConfig protocolConfig=new ProtocolConfig();
    protocolConfig.setName("dubbo");
    protocolConfig.setPort(port);
    protocolConfig.setThreads(20);
    ServiceConfig<UserService> serviceConfig=new ServiceConfig();
    serviceConfig.setApplication(config);
    serviceConfig.setProtocol(protocolConfig);
    serviceConfig.setRegistry(new RegistryConfig(RegistryConfig.NO_AVAILABLE));
    serviceConfig.setInterface(UserService.class);
    serviceConfig.setRef(new UserServiceImpl());
    serviceConfig.export();
}

客户端代码:

static String remoteUrl = "dubbo://127.0.0.1:12345/tuling.dubbo.server.UserService";
// 构建远程服务对象
public UserService buildRemoteService(String remoteUrl) {
    ApplicationConfig application = new ApplicationConfig();
    application.setName("young-app");
    ReferenceConfig<UserService> referenceConfig = new ReferenceConfig<>();
    referenceConfig.setApplication(application);
    referenceConfig.setInterface(UserService.class);
    referenceConfig.setUrl(remoteUrl);
    UserService userService = referenceConfig.get();
    return userService;
}

基于Dubbo实现服务集群:

在上一个例子中如多个服务的集群?即当有多个服务同时提供的时候,客户端该调用哪个?以什么方式进行调用以实现负载均衡?

一个简单的办法是将多个服务的URL同时设置到客户端并初始化对应的服务实例,然后以轮询的方式进行调用。

但如果访问增大,需要扩容服务器数量,那么就必须增加配置重启客户端实例。显然这不是我们愿意看到的。Dubbo引入了服务注册中的概念,可以解决动态扩容的问题。

演示基于注册中心实现服集群:

修改服务端代码,添加zookeeper 注册中心。

修改客户端代码,添加zookeeper 注册中心。

观察 多个服务时,客户端如何调用。

观察 动态增减服务,客户端的调用。

# 服务端连接注册中心
serviceConfig.setRegistry(new RegistryConfig("zookeeper://224.1.1.1:2222"));
# 客户端连接注册中心
referenceConfig.setRegistry(new RegistryConfig("zookeeper://224.1.1.1:2222"));
#查看 基于UDP 占用的2222 端口
netstat -ano|findstr 2222

基于spring IOC维护Dubbo 实例

在前面两个例子中 出现了,ApplicationConfig、ReferenceConfig、RegistryConfig、com.alibaba.dubbo.config.ServiceConfig等实例 ,很显然不需要每次调用的时候都去创建该实例那就需要一个IOC 容器去管理这些实例,spring 是一个很好的选择。

提供者配置

<?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://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="simple-app"  />
    <!-- 使用zookeeper广播注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://224.5.6.7:1234" />
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="tuling.dubbo.server.UserService" ref="userService" />
    <!-- 和本地bean一样实现服务 -->
    <bean id="userService" class="tuling.dubbo.server.impl.UserServiceImpl" />
</beans>

提供者服务暴露代码:

ApplicationContext context = new ClassPathXmlApplicationContext("/spring-provide.xml");
((ClassPathXmlApplicationContext) context).start();
System.in.read();

消费者配置

<?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://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

    <dubbo:application name="young-app"/>
    <dubbo:registry address="zookeeper://224.5.6.7:1234"/>
    <dubbo:reference id="userService" interface="tuling.dubbo.server.UserService"/>
</beans>

消费者调用代码:

ApplicationContext context = new ClassPathXmlApplicationContext("/spring-consumer.xml");
UserService userService = context.getBean(UserService.class);
UserVo u = userService.getUser(1111);
System.out.println(u);

二、Dubbo常规配置说明


Dubbo配置的整体说明:

标签

用途

解释

公共

用于配置当前应用信息,不管该应用是提供者还是消费者

公共

用于配置连接注册中心相关信息

服务

用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受

服务

用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心

服务

当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选

引用

当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选

引用

用于创建一个远程服务代理,一个引用可以指向多个注册中心

公共

用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息

公共

用于指定方法参数配置

配置关系图:

配置分类

所有配置项分为三大类。

  1. 服务发现:表示该配置项用于服务的注册与发现,目的是让消费方找到提供方。
  2. 服务治理:表示该配置项用于治理服务间的关系,或为开发测试提供便利条件。
  3. 性能调优:表示该配置项用于调优性能,不同的选项对性能会产生影响。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MoziInnovations 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Dubbo 快速入门
    • Dubbo核心功能解释
      • 快速演示Dubbo的远程调用
        • 基于Dubbo实现服务集群:
          • 基于spring IOC维护Dubbo 实例
          • 二、Dubbo常规配置说明
            • Dubbo配置的整体说明:
            相关产品与服务
            云服务器
            云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档