首页 > 其他分享 > Dubbo快速入门

Dubbo快速入门

时间:2022-08-24 11:36:46浏览次数:69  
标签:Dubbo 入门 dubbo 快速 list provider import com

1、Dubbo是什么

1、RPC是什么

Remote Procedure Call,远程过程调用(服务器间调用),是一种进程间的通信方式,是一种技术的思想而不是规范。允许程序调用另一个地址空间的函数或过程。实质上是利用http协议,完成参数、方法名的传递并获得返回值,以此达到远程调用的目的。

原理说明:

具体的执行过程:

2、Dubbo

Dubbo是一款高性能java RPC 框架,可以做:面向接口的高性能RPC调用、智能负载均衡(当多个服务器都有相同业务时进行选择)、支持注册中心服务、高可扩、运行器流量调度、灰度发布、可视化的运维和治理

Dubbo的设计架构:

3、ZooKeeper

充当注册中心的角色,provider在ZooKeeper中注册,consumer去注册中心订阅

ZooKeeper安装

官网下载压缩包解压;

在bin目录下执行zkServer.cmd;如执行失败,在conf目录下拷贝一份zoo_sample.cfg并重命名为zoo.cfg(在zoo.cfg中配置ZooKeeper数据存放位置);

再次执行zkServer.cmd成功后在另一个窗口中执行zkCli.cmd,运行成功后可执行指令

注:两个cmd窗口同时存在

4、需要的安装包

链接:https://pan.baidu.com/s/1Gv2zw4BUNZbFBaPDfJD3HQ
提取码:0707

monitor页面安装

zookeeper按上述步骤解压安装即可,dubbo的monitor安装给的是jar包直接通过java -jar dubbo-admin-0.0.1SNAPSHOT.jar运行,访问localhost:7001即可进入monitor页面

2、Dubbo整合SpringBoot

示例:创建两个SpringBoot项目(provider、consumer)、一个maven项目(common-component抽取出公共类和接口,具体见这篇文章https://www.cnblogs.com/Gw-CodingWorld/p/16615443.html,通过dependency引入两个项目中),每个项目中内嵌tomcat服务器,在这两个项目间进行服务的调用,即两个服务器间的服务调用

1、引入starter

<!-- https://mvnrepository.com/artifact/com.alibaba.boot/dubbo-spring-boot-starter -->
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.1.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>2.12.0</version>
</dependency>

2、进行配置

dubbo:
  application:
    name: dubbo-service-provider
  registry:
    protocol: zookeeper
    address: 127.0.0.1:2181
  protocol:
    name: dubbo
    port: 20880
  monitor:
    protocol: registry
    
server:
	port: 8080  #注意两个项目端口号不一样,否则在电脑上不能同时运行

3、项目结构说明

common-component

特别说明:抽取的公共类中的实体类需要序列化,即对下例中的User实现Serializable接口

抽取的公共类,加入至本地maven仓库的方法见https://www.cnblogs.com/Gw-CodingWorld/p/16615443.html

<!--抽取出来的公共类在两个SpringBoot项目中依赖引用-->
<dependency>
    <groupId>com.common</groupId>
    <artifactId>common-component</artifactId>
    <version>0.0.1</version>
</dependency>

SpingBoot启动类

两个项目都要开启@EnableDubbo

package com.gw;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubbo
@SpringBootApplication
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }

}

provider

在provider项目中实现公用的UserService接口,注意@Service为Dubbo包中的注解,使服务暴露在Dubbo中,即在注册中心进行注册,其他服务器可以使用@Reference来引用该类

package com.gw.service;

import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
import pojo.User;
import service.UserService;

import java.util.List;

@Service
@Component
public class UserServiceImpl implements UserService {
    @Override
    public List<User> queryUser() {
        List<User> list= null;
        list.add(new User("zhangsan","123456","1"));
        list.add(new User("zhangsan","123456","1"));
        list.add(new User("zhangsan","123456","1"));
        list.add(new User("zhangsan","123456","1"));
        return list;
    }
}

consumer

1661225294005

在consumer项目中调用provider服务器中实现的UserService

package com.gw.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;
import pojo.User;
import service.UserService;

import java.util.List;

@Controller
public class test {

    @Reference    //引用暴露出来的服务
    UserService userService;

    @RequestMapping("/hello")
    @ResponseBody
    List<User> testDubbo(){

        List<User> list = userService.queryUser();

        return list;
    }

}

3、可能出现的问题

  1. Invalid File Path ---> 将data目录中的记录删除或者在zoo.cfg文件中重新设置一个dataDir,重新启动zookeeper
  2. 注意,项目必须要先启动provider后启动consumer
  3. 小技巧,启动zookeeper后先启动dubbo的monitor(localhost:7001)页面,通过该页面来判断是否注册到zookeeper中,如已注册则说明java程序有问题
  4. java程序有问题了先检查pojo实体类是否序列化,再检查dao、service、controller
  5. 依赖要引入starter和curator
  6. java.io.IOException: Can not lock the registry cache file D:\home.dubbu\runtime.cache, ignore and retry later, maybe multi java process use the file, please config: dubbo.registry.file=xxx.properties ---> 在provider中设置registry.file= ${catalina.home}/dubbo-registry/dubbo-registry.properties

标签:Dubbo,入门,dubbo,快速,list,provider,import,com
From: https://www.cnblogs.com/Gw-CodingWorld/p/16619243.html

相关文章

  • HCIA学习笔记二十二:RSTP快速生成树
    一、RSTP快速生成树• RapidSpanningTreeProtocol快速生成树。• RSTP是STP的升级版本,与STP相比,最显著的特点就是通过新的机制,加快了收敛速度。二、交换机端口角......
  • 【python】Django入门例子
     https://blog.csdn.net/DAO_HUNG/article/details/120245121页面效果:     碰到的问题:1、setting.py的TEMPLATES‘DIRS’[]加入模版路径配置错误,不知道为......
  • Spark基础入门(01)—RDD
    1,基本概念RDD(ResilientDistributedDataset):弹性分布式数据集它是Spark中最基本的数据抽象,是编写Spark程序的基础。简单的来讲,一个Spark程序可以概括为:<输入>=>[转......
  • 什么是ELK(小白简单快速的认识什么是ELK)
    今天继续给大家介绍Linux运维相关知识,本文主要内容是ELK的基本原理。一、ELK简介ELK是三个软件的统称,即Elasticsearch、Logstash和Kibana三个开源软件的缩写。这三款软件......
  • Python3项目初始化8-->css和bootstrap入门学习
    24、CSS基础HTML盒模型divspanCSS选择器,常见属性值Bootstrap栅格系统,表单,表格,常用组件。Div一个盒子,默认站一行Span行内元素P段落元素为什么需要div?t......
  • 三种分页方式-JWT原理-Django中快速使用JWT-修改返回格式-JWT的验证-自定义用户签发To
    三种分页方式#什么样接口要分页----》获取所有#三种分页方式---》继承GenericAPIView,ListModelMixin-list方法---》分页的使用 page.pyfromrest_framework.p......
  • GIT--快速入门
    本文仅用于作者个人学习记录,如有侵权请联系删除什么是Git分布式版本控制和源代码管理系统软件GIT中的基础概念GIT分区Workspace:工作区  //通过gitinit创建的代......
  • Java Servlet 入门:问题系列:java.lang.NoClassDefFoundError
    问题来源:java.lang.NoClassDefFoundError1、新建了一个java项目,定义一个类:  2、右键属性,Export,导出Jar包: 按  完成后。在另一个项目引用:运行结果  ......
  • WPF开发快速入门【0】前言与目录
    前言WPF是一个生不逢时的技术,刚推出的时候由于是XP时代,WPF技术有两个不方便的地方:1、由于操作系统没有自带Framework,需要另外安装,比较麻烦;2、程序第一次启动时,由于要加......
  • WPF开发快速入门【1】WPF的布局
    概述本文描述几款WPF中常用的布局控件。 GridGrid是WPF最常用的布局控件。 它把面板分割为固定长和宽的网格,子控件就放置在网格内。<Grid><Grid.Colu......