dubbo入门和springboot集成dubbo小例子

从零开始搭建springboot-dubbo的例子

Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案

一、 Dubbo的简单介绍

1. 网站架构的发展历程

网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多.......

  • 单一应用架构(OORM)

当网站流量很小时,将所有的功能部署到一起,以减少部署节点和成本。此时,只需要使用简化增删改查的工作量,采用数据访问框架(ORM)。

  • 垂直应用架构 (MVC)

当访问量逐渐增大,单一应用带来的加速度越来越小。此时,将应用拆分成互不相干的几个应用,所以采用MVC框架。

  • 分布式服务架构 (RPC)

当垂直应用越来越多,应用之交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速地响应多变的市场需求。此时,用于提高业务复用及整合的服务框架(RPC)是关键。

  • 流动计算框架 (SQA)

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。

2. dubbo核心工作原理

节点 角色说明
Provider 暴露服务的服务提供方
Registry 服务的注册与发现的注册中心,如zookeper(推荐)、multicast、redis、simple
Consumer 调用远程服务的服务消费方
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器

调用流程

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

3. dubbo特点

  1. Dubbo 支持 RPC 调用,服务之间的调用性能会很好,效率很高
  2. 支持多种序列化协议,如 Hessian(默认)、HTTP、WebService
  3. 对比springcloud

二、 springboot-Dubbo搭建

想要使用Dubbo的话,按照前面的原理图,我们主要使用它的服务远程调用功能,也就是两个项目之间相互通讯,即RPC

直接上图,先大致看看项目结构:

dubbo-provider是所谓的服务提供者,springboot项目

dubbo-consumer是服务消费者,springboot项目

dubbo-api是服务提供者的接口API,最普通的maven项目

这里可以会想起dubbo工作原理的图:

  • 0 dubbo-provider先在容器里初始化启动
  • 1 dubbo-provider去注册中心去注册服务,注册中心使用zookeeper
  • 2 dubbo-consumer去注册中心发现需要的服务
  • 3 注册中心返回dubbo-provider的服务
  • 4 dubbo-consumer直接去调用dubbo-provider

1. 项目依赖

dubbo的jar包依赖(spring-boot)

<!-- dubbo依赖 -->
<dependency>
    <groupId>com.alibaba.spring.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>

注册中心zookeeper的jar包依赖

<!-- 引入zookeeper的依赖 -->
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>

2. 服务提供者

服务提供者dubbo-provider提供HelloService.sayHello()接口

package com.dubbo.provider.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.dubbo.service.HelloService;
import org.springframework.stereotype.Component;

//@Service是dubbo里的注解,作用是暴露服务,不要选择spring的@Service
@Service
@Component
public class HelloServiceImpl implements HelloService {

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

还要在springboot的启动类上加一个开启Dubbo的注解

package com.dubbo.provider;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//开启dubbo的自动配置
@EnableDubboConfiguration
@SpringBootApplication
public class DubboProviderApplication {

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

}

3. 服务消费者

dubbo-consumer远程调用dubbo-consumer提供的服务HelloService.sayHello()接口

package com.dubbo.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.service.HelloService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @Reference//dubbo注解,可以仔细了解下这个注解
    private HelloService helloService;

    @RequestMapping(value = "/hello")
    public String hello() {
        String hello = helloService.sayHello("world");
        System.out.println(helloService.sayHello("BJQ"));
        return hello;
    }

}

同上,这个也需要让Dubbo开启自动配置

package com.dubbo.consumer;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//就是这里,对,没错 ->_->
@EnableDubboConfiguration
@SpringBootApplication
public class DubboConsumerApplication {

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

}

4. 项目启动流程和结构

1. 启动祖册中心:

项目启动需要去官网下载zookeper注册中心,解压,配置一下zoo.cfg配置文件,然后启动zkServer.cmd(以下是我的简单配置)

tickTime=2000
initLimit=10
syncLimit=5
dataDir=F:\\zookeeper-3.4.14\\temp\\zookeeper
dataLogDir=F:\\zookeeper-3.4.14\\temp\\zookeeper-logs
clientPort=2181

2. 启动服务提供方dubbo-provider

如下图,说明dubbo-provider启动,并且已经连上注册中心

3. 启动服务消费方dubbo-consumer

效果跟上面差不多

4. 服务调用结果

自己去试试,皮一下,,哈哈 QWQ

注意点和问题

dubbo直连,这个可以在测试的过程中使用

dubbo的高校序列化协议可以选的,默认是hessian

dubbo是基于TCP协议去做的,所以很快。

在启动zookeeper时,会有窗口一闪而过的情况,有可能时jdk环境变量有空格,还有可能是zk的dataDir路径不对

《完》

原文地址:https://www.cnblogs.com/baijinqiang/p/10848259.html

时间: 2024-10-17 13:59:39

dubbo入门和springboot集成dubbo小例子的相关文章

springboot集成mybatisplus小例子

集成mybatisplus后,简单的CRUD就不用写了,如果没有特别的sql,就可以不用mapper的xml文件的. 目录 pom.xml文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i

eclipse创建Maven Project(springboot集成dubbo第一步)

!!!每一种方式都是自己的工具,熟悉就好,献给最初的我与你 创建maven项目 注意此处:我勾选了第一个按钮 1:file->New Maven Project->next     2:输入内容->完成 Group Id :组名 常指公司名(任意) ArtiFact Id :项目名(任意),其它默认   3:项目初步总览(此时项目有感叹号)     3:修改java版本:项目名 右键->properties ->选中 java Build Path ->JRE Syst

SpringBoot集成Dubbo

(1).新建一个普通Maven项目,用于存放一些公共服务接口及公共的Bean等. 项目: 公共Bean: 1 package cn.coreqi.entities; 2 3 import java.io.Serializable; 4 5 public class User implements Serializable { 6 private Integer id; 7 private String userName; 8 private String passWord; 9 private

springboot 集成dubbo

原文地址:https://www.cnblogs.com/hwgok/p/9527008.html

【Echarts】百度Echarts的使用入门+两个简单的小例子+心得

Echarts对于展示结果,有一个很好的表达方式. 1.首先,在官网将js下载到本地,引用到页面上 这里是在开发环境,所以下载最后源代码这个 managerResult.jsp 1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <!DOCTYPE html> 4 <html lang

dubbo学习(三) springboot整合dubbo mybatis mysql

dubbo-admin查看服务和服务提供方配置 服务消费方配置 和web 整合相对复杂一些,常出现的问题是Controller中 有@Reference配置的属性  没注入进来而调用时报null 异常 原文地址:https://www.cnblogs.com/LDDXFS/p/9941203.html

Dubbo入门---搭建一个最简单的Demo框架

Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本. 缺点:单一的系统架构,使得在开发过程中,占用的资源越来越多,而且随着流量的增加越来越难以维护 垂直应用框架(MVC) 垂直应用架构解决了单一应用架构所面临的扩容问题,流量能够分散到各个子系统当中,且系统的体积可控,一定程度上降低了开发人员之间协同以及维护的成本,提升了开发效率. 缺点:但是在垂直架构

springboot集成mybatis环境搭建以及实现快速开发微服务商品模块基本的增删改查!

之前学习了springboot和mybatis3的一些新特性,初步体会了springboot的强大(真的好快,,,,,),最近趁着复习,参考着以前学习的教程,动手写了一个springboot实战的小例子! 一 创建表以及实体 使用简单的五个字段商品表,主键采用UUID字符串,价格使用BigDecimal,本来是想在linux数据库中建立表的,实在是懒不想启动虚拟机(这么简单也觉得没必要),,sql语句如下: create table products( pid varchar(32) not n

SpringBoot系列之集成Dubbo的方式

本博客介绍Springboot框架集成Dubbo实现微服务的3种常用方式,对于Dubbo知识不是很熟悉的,请先学习我上一篇博客:SpringBoot系列之集成Dubbo实现微服务教程,本博客只是对上篇博客的补充,上篇博客已经介绍过的就不重复介绍 还是使用上篇博客的例子,业务场景: 某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址: 我们现在 需要创建两个服务模块进行测试 模块 功能 订单服务模块 创建订单等 用户服务模块 查询用户地址等 测试预期结果: 订单服务web模块在A服务器,