1.Dubbo综述

2021SC@SDUSC

dubbo介绍

dubbo是一个微服务的开发框架。

如果服务过多,就尽量不要把所有的服务都部署在同一台机器上,而是把服务拆分成不同的微服务,部署在不同的机器上,提高可用性。

因为不同的服务部署在了不同的机器上,而这些服务有可能需要相互通信,就有了RPC的概念。

RPC(Remote Procedure Call)即远程调用过程,实现像原来调用本机上的服务一样,调用不同机器上的远程服务。RPC有不同的实现方式。

而dubbo的两大核心能力,就是RPC通信和微服务治理。因此可用dubbo拆分服务,实现相互通信,同时还可利用dubbo的其他功能实现负载均衡,流量调度等。

dubbo的架构如下:
1.Dubbo综述
节点 角色说明
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器

  1. 首先启动容器,加载运行服务提供者。
  2. 服务提供者向注册中心注册服务。
  3. 服务消费者启动,向注册中心订阅服务。
  4. 注册中心给消费者提供所需服务的地址列表
  5. 根据负载均衡算法,选择服务的一个提供者向消费者服务
  6. 监控器每隔一段时间接受服务的各项统计数据。

dubbo配置

dubbo提供api使用,不过一般都整合spring进行使用。

  1. 定义服务接口,如:
package org.apache.dubbo.demo;

public interface DemoService {
    String sayHello(String name);
}
  1. 服务提供方实现接口
package org.apache.dubbo.demo.provider;

import org.apache.dubbo.demo.DemoService;

public class DemoServiceImpl implements DemoService {
   public String sayHello(String name) {
       return "Hello " + name;
   }
}
  1. spring配置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://dubbo.apache.org/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        http://dubbo.apache.org/schema/dubbo        http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
 
    <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="hello-world-app"  />
 
    <!-- 使用multicast广播注册中心暴露服务地址 -->
    <dubbo:registry address="multicast://224.5.6.7:1234" />
 
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />
 
    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService" />
 
    <!-- 和本地bean一样实现服务 -->
    <bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl" />
</beans>
上一篇:flink clickhouse-jdbc和flink-connector 写入数据到clickhouse因为jar包冲突导致的60 seconds.Please check if the reque


下一篇:RestFul和RPC的区别