前言

这段时间在接触分布式的内容,因为公司的技术栈是 dubbo ,所以我顺其自然地选择了 dubbo 作为我学习的框架。
看了任务清单,这篇文章应该是在6天前出来的,但是因为实习等等的一些事情耽误了,今天立下决心动笔了。

准备

必需
JAVA 环境
注册中心(我选用的是 nacos )

非必需
Maven
docker
idea(这个应该是必需的?当然也可以用记事本(滑稽.jpg))

正文

  1. 新建普通的 maven 项目(不勾选任何选项),手动写入 pom 文件,配置项如下
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>

其实也可以不要 lombok ,此处只是方便调试。

  1. 新建三个module,分别命名为 api,provider,consumer
  • 模块作用
api -- 普通 maven 项目,用于定义provider以及consumer交互的接口以及规范
provider -- Spring Boot 本地项目,用于为 api 中定义的服务接口创建实体类
consumer -- Spring Boot web 项目,接收用户请求,调用 provider 处理请求并返回结果
  • 模块pom定义

    • 根项目新增
      <modules>
    <module>api</module>
    <module>provider</module>
    <module>consumer</module>
    </modules>
    • api 新增
      <version>0.0.1-SNAPSHOT</version>
    • consumer 新增
      <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>com</groupId>
    <artifactId>api</artifactId>
    <version>${project.version}</version>
    </dependency>
    <dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
    </dependency>
    <dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.7.3</version>
    </dependency>
    <dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-registry-nacos</artifactId>
    <version>2.7.3</version>
    </dependency>
    <dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>1.0.0</version>
    </dependency>
    </dependencies>
    • provider 新增
      <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>com</groupId>
    <artifactId>api</artifactId>
    <version>${project.version}</version>
    </dependency>
    <dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
    </dependency>
    <dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.7.3</version>
    </dependency>
    <dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-registry-nacos</artifactId>
    <version>2.7.3</version>
    </dependency>
    <dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>1.0.0</version>
    </dependency>
    </dependencies>
  • 模块配置文件

    • provider 配置文件
      dubbo:
    registry:
    address: nacos://192.168.99.100:8848
    application:
    name: dubbo-provider
    • consumer 配置文件
      spring:
    application:
    name: dubbo-consumer
    cloud:
    nacos:
    discovery:
    server-addr: 192.168.99.100
    server:
    port: 8081
    servlet:
    context-path: /text
    dubbo:
    protocol:
    port: -1
    name: dubbo
    registry:
    address: nacos://192.168.99.100:8848
    cloud:
    subscribed-services: dubbo-spring-cloud-provider
    application:
    name: consumer
  1. 示例搭建(Hello World)
  • 接口 HelloService 构建
package com.api;

public interface HelloService {

    String say(String name);
}
  • 服务提供类实现
package com.producer;

import com.api.HelloService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component; @Service
@Component
public class HelloServiceImp implements HelloService { @Override
public String say(String name) {
return "hello,"+name;
}
}

注意:@Service 注解是 dubbo 的注解,不是 Spring 的注解

  • 消费者实现
package com.consumer;

import com.api.HelloService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; @RestController
public class TextController { @Reference
private HelloService helloService; @GetMapping("/text")
public String text(){
return helloService.say("cartoon");
} }

dubbo 的服务消费应该在消费者中的 Service 层做整合消费后返回处理结果,这里仅为演示。

  1. 运行

先运行 provider 再运行 consumer,否则 dubbo 会因无法找到服务提供者自行关闭消费者。

  • nacos 的结果

  • 插件 RestServices 的模拟调用

后记

虽然在网上已经有很多这方面的教程,但是大多是用 zookeeper 作为注册中心。
而个人喜欢接触新技术,nacos 在今年1月才由阿里开源出来。而且我比较喜欢 nacos 的界面风格,虽然 nacos 在功能上不如 zookeeper+dubboAdmin 强大,但是作为入门应该是足够的。
在我的任务清单上,还规划着 dubbo 的 spi 机制的全注解辅以配置文件使用文章,但是因为时间以及我对机制还没深入理解,所以我将这篇文章押后了,等深入源码之后再根据源码写出我想要的文章。

本文首发于cartoon的博客
转载请注明出处:https://cartoonyu.github.io/cartoon-blog/post/dubbo/dubbo与springboot的结合/

Dubbo与SpringBoot的结合的更多相关文章

  1. dubbo+zookeeper+springboot简单示例

    目录 dubbo+zookeeper+springboot简单示例 zookeeper安装使用 api子模块 生产者producer 消费者consumer @(目录) dubbo+zookeeper ...

  2. 手把手教你Dubbo与SpringBoot常用两种方式整合

    一.Dubbo整合SpringBoot的方式(1) 1)直奔主题,方式一: pom.xml中引入dubbo-starter依赖,在application.properties配置属性,使用@Servi ...

  3. Dubbo整合Springboot框架

    本文使用的是alibaba的Dubbo. Dubbo整合Springboot可以分为四步: 第一步:首先需要了解Dubbo官方给的建议,至少有三个工程: 接口工程:主要存实体bean和业务接口 服务提 ...

  4. Dubbo整合SpringBoot

    目前的dubbo已支持和springboot集成,还是之前的例子,这次我们通过springboot容器来实现.借此了解一下基于springboot容器启动的dubbo的配置及使用. 1. 准备工作 创 ...

  5. dubbo与springboot的三种整合方式

    SpringBoot与dubbo整合的三种方式:1.导入dubbo-starter,在application.properties配置属性,使用@Service暴露服务,使用@Reference引用服 ...

  6. Dubbo配合SpringBoot,实现接口多个实现(group)

    SpringBoot配合Dubbo,使用@Service和@Reference,group实现接口多实现 公司项目升级,需要实现springBoot + Dubbo,并支持一个接口多个实现的情况.遇到 ...

  7. dubbo入门学习(三)-----dubbo整合springboot

    springboot节省了大量的精力去配置各种bean,因此通过一个简单的demo来整合springboot与dubbo 一.创建boot-user-service-provider 本篇博文基于上篇 ...

  8. Dubbo与SpringBoot整合流程(从实例入手,附代码下载)

    场景 Dubbo环境搭建-管理控制台dubbo-admin实现服务监控: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10362 ...

  9. 一个 dubbo 和 springboot 的兼容性问题

    背景介绍 最近把dubbo的版本从2.7.3升级到2.7.15时,遇到一个报错 No application config found or it's not a valid config! ,对应的 ...

随机推荐

  1. easyUI学习笔记一

    1.引用js文件 <script type="text/javascript" src = jquery-easyui/jquery.min.js> </scri ...

  2. Oracle学习笔记<3>

    单值函数 1.函数的分类 Oracle数据库中函数分为两类: 1)单值函数 n条数据经过函数处理得到n条结果 例如:查询所有员工last_name,并以全部大写形式输出 2)多值函数(组函数) n条数 ...

  3. luoguP2184 贪婪大陆 题解(树状数组)

    P2184 贪婪大陆  题目 其实很容易理解就是询问一段区间内有多少段不同的区间 然后再仔细思索一下会发现: 1.只要一个区间的开头在一个节点i的左边,那么这个区间包含在区间1~i中. 2.只要一个区 ...

  4. unittest接口自动化测试报告

    unittest接口自动化测试报告 展示: 代码: __author__ = "Wai Yip Tung, Findyou" __version__ = "0.8.2.1 ...

  5. SetDefaultDllDirectories问题

    换台电脑编译报错! 在使用Visual Studio 2013编译程序的时候报以下错误 vc\atlmfc\include\atlcore.h(638): error C2039: “”: 不是“`g ...

  6. java--字符串拼接比较

    /** * 字符串拼接 */ public class StringAddDemo { public static void main(String[] args){ testStringAdd(); ...

  7. disk或者Partition镜像的制作

    备份镜像还原一般都是在client-server端这边才有涉及,不过作为平时爱折腾的咸鱼,表示偶尔玩玩这种操作也不错: 工具:pc  X  1(装有 大白菜,装机吧,一类制作pe软件的即可,大同小异) ...

  8. 【UML】最简单的类图

    Rational Rose简明实用教程  https://blog.csdn.net/gz153016/article/details/49641847 Rational Rose是Rational公 ...

  9. PHP disk_total_space() 函数

    定义和用法 disk_total_space() 函数返回指定目录的磁盘总容量,以字节为单位. 语法 disk_total_space(directory) 参数 描述 directory 必需.规定 ...

  10. SQL中LEFT JOIN ON AND 与 LEFT JOIN ON WHERE的区别

    数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. ON...WHERE ' order by ts.id SQL执行过程: 生成临时表: ON条件:  ...