当前位置:首页 > 服务端 > dubbo(2)-dubbo的搭建

dubbo(2)-dubbo的搭建

2022年09月17日 13:15:45服务端2

dubbo 官方文档地址:https://dubbo.gitbooks.io/dubbo-user-book/content/preface/

1. dubbo介绍

dubbo是基于RPC协议的。
RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。简言之,RPC使得程序能够像访问本地系统资源一样,去访问远端系统资源。

1.1 dubbo架构图

dubbo(2)-dubbo的搭建 _ JavaClub全栈架构师技术笔记
说到dubbo就不得不看一下经典的dubbo架构图。

1.2 架构图说明

角色说明:
Container:服务运行容器
Privoder: 服务提供者
Consumer: 服务消费者
Register: 服务注册中心,负责服务注册与发现
Monitor: 统计服务的调用次数和调用时间的监控中心

调用关系说明:

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

2. dubbo+Spring的搭建

搭建一个简单的dubbo demo需要至少需要三个组件,服务提供者,服务消费者,注册中心

2.1 依赖

需要spring相关的jar.这里就不列了
dubbo相关的jar
zk相关的jar

		<!-- dubbo-->
		<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.9</version>
        </dependency>

        <!--zookeeper-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.6.3</version>
        </dependency>

2.2 搭建

2.2.1 zookeeper注册中心

安装zk,启动zk。默认的zk的地址和端口 localhost:2181

2.2.2 provider

xml配置,这里进行了拆分

  1. dubbo的基本配置,dubbo-register.xml
    <!-- 提供方名称,用于配置当前应用信息 -->
    <dubbo:application name="provider" version="1.0.0" ></dubbo:application>
    <!-- 注册中心配置,配置zk地址和端口 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"  id="myRegistry"/>
    <!-- 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受,用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol id="duboo" name="dubbo" port="20880" >
        <dubbo:parameter key="myKey" value="123213"></dubbo:parameter>
    </dubbo:protocol>

    <!--配置一些共有的属性,然后在<dubbo:service>中引用-->
    <dubbo:provider id="myProvider" protocol="dubbo" />
  1. dubbo的暴露接口及相关bean的配置,dubbo-service.xml
    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.hww.api.IDemoService"
                   ref="demoService" registry="myRegistry"
                   protocol="dubbo" provider="myProvider">
        <dubbo:method name="sayHello" timeout="3000"/>
        <dubbo:method name="sayHi" timeout="3000"/>

    </dubbo:service>

    <!-- 配置到spring容器中 -->
    <bean id="demoService" class="com.hww.service.DemoServiceImp" />
  1. 接口API
    拆分了一个api项目。由于dubbo服务提供者要暴露接口,而这些接口也需要在服务消费者声明。所以拆分了一个专门用来声明暴露接口的api项目。在该项目中定义要暴露的接口和方法。
    然后将该工程打成一个jar包,分别让服务提供者和服务消费者依赖这个jar。
    搭建简单的maven工程,工程中创建接口和方法。然后打包一个jar,dubbo-api
public interface IDemoService {
     

    String sayHello(String name);

    String sayHi(String str);
}

打成jar配置如下

		<dependency>
            <groupId>org.example</groupId>
            <artifactId>dubboDemo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
  1. 搭建provider工程
    实现dubbo-api中的接口
package com.hww.service;

import com.hww.api.IDemoService;

public class DemoServiceImp implements IDemoService {
     

    public String sayHello(String name) {
     
        return "Hello " + name;
    }

    public String sayHi(String str) {
     
        return "Hi"+str;
    }
}
  1. provider 启动
package com.hww.main;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Provider {
     
    public static void main(String[] args) throws Exception {
     
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[]{
     "classpath:dubbo-register.xml","dubbo-service.xml"});
        context.start();
        System.out.println("服务端启动成功。。。");
        System.in.read(); // 按任意键退出,让服务阻塞,不关闭
    }
}

此时服务提供端就启动成功,等待消费端进行消费

2.2.3 consumer

  1. xml配置
    这里同样也拆分成多个xml配置,dubbo-register.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.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

    <!-- 消费方应用名 -->
    <dubbo:application name="consumer"  />
    <!-- 注册中心配置 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />

</beans>
  1. dubbo-reference.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.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

    <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
    <dubbo:reference id="demoService" interface="com.hww.api.IDemoService">
        <dubbo:method name="sayHello"/>
        <dubbo:method name="sayHi"/>
    </dubbo:reference>

</beans>
  1. 引入dubbo-api jar包
		<dependency>
            <groupId>org.example</groupId>
            <artifactId>dubboDemo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
  1. 消费端启动和远程调用
package com.hww.main;

import com.hww.api.IDemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import static java.lang.Thread.sleep;

public class Consumer {
     
    public static void main(String[] args) throws Exception {
     
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] {
     "classpath:dubbo-register.xml","dubbo-reference.xml"});
        context.start();
        IDemoService demoService = (IDemoService)context.getBean("demoService"); // 获取远程服务代理
        String hello = demoService.sayHello("world"); // 执行远程方法
        System.out.println( hello ); // 显示调用结果
        String world = demoService.sayHi("world");
        System.out.println(world);

        sleep(12345646);
    }
}

2.3 搭建说明

  1. 对xml的配置进行了拆分,将接口和其他的dubbo基本配置分开到不同的xml配置中,便于维护
  2. 引入dubbo-api。将接口进行单独维护

2.4 xml配置标签说明

dubbo:service/ 服务配置 用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心
dubbo:reference/ 2 引用配置 用于创建一个远程服务代理,一个引用可以指向多个注册中心
dubbo:protocol/ 协议配置 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受
dubbo:application/ 应用配置 用于配置当前应用信息,不管该应用是提供者还是消费者
dubbo:module/ 模块配置 用于配置当前模块信息,可选
dubbo:registry/ 注册中心配置 用于配置连接注册中心相关信息
dubbo:monitor/ 监控中心配置 用于配置连接监控中心相关信息,可选
dubbo:provider/ 提供方配置 当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选
dubbo:consumer/ 消费方配置 当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选
dubbo:method/ 方法配置 用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息
dubbo:argument/ 参数配置 用于指定方法参数配置

重要的几个标签

  • dubbo-application 一般会指定当前项目的名称。provider和consumer都使用
  • dubbo-register 用来配置注册中心地址和端口,provider和consumer都使用

注册中心有很多中,除了zk之外
Multicast 注册中心
Redis 注册中心
Simple 注册中心

  • dubbo-protocol 协议配置,由provider指定,consumer被动接受。

协议包括:
dubbo://
rmi://
http://
redis://
webservice://
memcached://
thrift://
hsessan://

  • dubbo-service dubbo-method用来服务端暴露接口和方法
  • dubbo-reference dubbo-method用来消费端映射接口和方法

3. dubbo+spring boot

3.1 依赖

 <!-- dubbo的依赖 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.6</version>
        </dependency>

        <!-- zk的依赖 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.6</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

3.2 搭建

3.2.1 zk

上面已经讲了

3.2.2 provider

  1. application.properties文件
#容器服务的端口
server.port=8888

# app的名称
dubbo.application.name=myProvicer
# zk注册中心
dubbo.registry.address=zookeeper://127.0.0.1:2181

# dubbo协议
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

# 指定实现服务(提供服务)的包
dubbo.scan.base-packages=com.hww.service
  1. service实现
package com.hww.service;

import com.hww.api.IDemoService;
import org.apache.dubbo.config.annotation.Service;

@Service(interfaceClass = IDemoService.class)
public class HelloService implements IDemoService {
     

    @Override
    public String sayHello(String s) {
     
        return "boot实现Dubbo";
    }

    @Override
    public String sayHi(String s) {
     
        return "boot实现Dubbo";
    }
}

注意:这里的@Service注解不是spring中的注解而是dubbo中的注解

3.2.3 consumer

  1. application.properties
#容器服务的端口
server.port=8889
# app的名称
dubbo.application.name=myComsumer
# zk注册中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
  1. 调用服务端
package com.example.dubboconsumerboot;

import com.hww.api.IDemoService;
import org.apache.dubbo.config.annotation.Reference;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DubboConsumerBootApplicationTests {
     

    @Reference
    private IDemoService demoService;

    @Test
    void contextLoads() {
     
        System.out.println(demoService.sayHello("aaaa"));
    }
}

这里使用了@Refenrence注解

3.2.4 搭建说明

  1. 服务端一定要配置dubbo.scan.base-packages扫描包,这个属性和 dubbo:service标签的作用一样,都是进行服务接口暴露
  2. 服务端@Service注解,和dubbo.scan.base-packages搭配使用,使用@Service注解的会被扫描,进行服务接口暴露
  3. 消费端@Reference注解,和dubbo:reference 标签作用一样,映射接口。让服务端向调用本地接口一样进行调用。

作者:水墨青花浅
来源链接:https://blog.csdn.net/tzw1039911355/article/details/120585966

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/42620.html

标签: Dubbo
分享给朋友:

“dubbo(2)-dubbo的搭建” 的相关文章

SpringBoot整合Dubbo与zookeeper纯注解版

SpringBoot整合Dubbo与zookeeper纯注解版

一、Dubbo和zk的作用 上回讲到,Dubbo作为一款优秀的RPC框架,封装了dubbo-provider(提供者)和dubbo-consumer(消费者),而provider和consumer之间需要通过注册中心来作为可发现的服务目录。而zookeeper(此处简称zk)提供了服务接口注...

Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!...

SpringBoot与Dubbo整合的三种方式

SpringBoot与Dubbo整合的三种方式

1. 使用默认application.properties和注解的方式 导入dubbo-starter,在application.properties配置属性,使用@Service注解来暴露服务,使用@Reference来引用服务。具体可参考 Dubbo整合Spring...

Java高级面试必问—Dubbo面试题汇总

1、默认使用的是什么通信框架,还有别的选择吗?2、服务调用是阻塞的吗?3、一般使用什么注册中心?还有别的选择吗?4、默认使用什么序列化框架,你知道的还有哪些?5、服务提供者能实现失效踢出是什么原理?6、服务上线怎么不影响旧版本?7、如何解决服务调用链过长的问题?8、说说核心的配置...

详解SpringMVC注解方式集成Dubbo

由于最近项目需要SpringMVC集成Dubbo,本文大概记录下详细集成过程: 一、首先项目中Maven引入Jar包 <!-- dubbo相关 --> <dependency> <gr...

maven+springmvc+dubbo+zookeeper

maven+springmvc+dubbo+zookeeper

springmvc+dubbo+zookeeper整合     为什么要用dubbo?   还是让官方来解释吧: http://d...

Dubbo整合Nacos

Dubbo整合Nacos

Dubbo项目将Nacos作为其注册中心和配置中心 Nacos提供了四个主要功能 服务发现和服务运行状况检查(服务治理):Nacos使服务易于注册自己并通过DNS或HTTP接口发现其他服务。Nacos还提供服务的实时运行状况检查,以防...

SpringCloud系列之集成Dubbo应用篇

SpringCloud系列之集成Dubbo应用篇

目录 前言 项目版本 项目说明 集成Dubbo 2.6.x 新项目模块 老项目模块 集成Dubbo 2....

SpringCloud采用Dubbo远程调用(SpringCloud Alibaba)

SpringCloud采用Dubbo远程调用(SpringCloud Alibaba)

系统架构:      这里只演示以下组件,其他组件的使用和SpringCloud一样     application-1 :应用1,模拟应用,提供http接口服务。     service-1 :微服务1,模拟微服务,提供dubbo接口服务。     se...

SpringBoot集成Dubbo

最近升级了SpringBoot版本发现Dubbo集成方式稍有不同,这里记录一下,以供参考。 SpringBoot 版本1.5.18.RELEASE 升级到2.0.3.RELEASE 第一步: 添加依赖 org.springframework....

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。