Dubbo与SpringBoot的结合
前言
这段时间在接触分布式的内容,因为公司的技术栈是 dubbo ,所以我顺其自然地选择了 dubbo 作为我学习的框架。
看了任务清单,这篇文章应该是在6天前出来的,但是因为实习等等的一些事情耽误了,今天立下决心动笔了。
准备
必需
JAVA 环境
注册中心(我选用的是 nacos )非必需
Maven
docker
idea(这个应该是必需的?当然也可以用记事本(滑稽.jpg))
正文
- 新建普通的 maven 项目(不勾选任何选项),手动写入 pom 文件,配置项如下
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
其实也可以不要 lombok ,此处只是方便调试。
- 新建三个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
- 示例搭建(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 层做整合消费后返回处理结果,这里仅为演示。
- 运行
先运行 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的结合的更多相关文章
- dubbo+zookeeper+springboot简单示例
目录 dubbo+zookeeper+springboot简单示例 zookeeper安装使用 api子模块 生产者producer 消费者consumer @(目录) dubbo+zookeeper ...
- 手把手教你Dubbo与SpringBoot常用两种方式整合
一.Dubbo整合SpringBoot的方式(1) 1)直奔主题,方式一: pom.xml中引入dubbo-starter依赖,在application.properties配置属性,使用@Servi ...
- Dubbo整合Springboot框架
本文使用的是alibaba的Dubbo. Dubbo整合Springboot可以分为四步: 第一步:首先需要了解Dubbo官方给的建议,至少有三个工程: 接口工程:主要存实体bean和业务接口 服务提 ...
- Dubbo整合SpringBoot
目前的dubbo已支持和springboot集成,还是之前的例子,这次我们通过springboot容器来实现.借此了解一下基于springboot容器启动的dubbo的配置及使用. 1. 准备工作 创 ...
- dubbo与springboot的三种整合方式
SpringBoot与dubbo整合的三种方式:1.导入dubbo-starter,在application.properties配置属性,使用@Service暴露服务,使用@Reference引用服 ...
- Dubbo配合SpringBoot,实现接口多个实现(group)
SpringBoot配合Dubbo,使用@Service和@Reference,group实现接口多实现 公司项目升级,需要实现springBoot + Dubbo,并支持一个接口多个实现的情况.遇到 ...
- dubbo入门学习(三)-----dubbo整合springboot
springboot节省了大量的精力去配置各种bean,因此通过一个简单的demo来整合springboot与dubbo 一.创建boot-user-service-provider 本篇博文基于上篇 ...
- Dubbo与SpringBoot整合流程(从实例入手,附代码下载)
场景 Dubbo环境搭建-管理控制台dubbo-admin实现服务监控: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10362 ...
- 一个 dubbo 和 springboot 的兼容性问题
背景介绍 最近把dubbo的版本从2.7.3升级到2.7.15时,遇到一个报错 No application config found or it's not a valid config! ,对应的 ...
随机推荐
- maven(二),Linux安装maven3.5.3及配置
Linux系统,ubuntu-16.04.4,安装maven3.5.3 一.创建文件夹 注意Linux用户,这个如果不是root用户,命令前面需要加:sudo //创建一个目录 mkdir /usr/ ...
- Cocos2d Box2D之动态刚体
| 版权声明:本文为博主原创文章,未经博主允许不得转载. b2_dynamicBody 动态物体可以进行全模拟.用户可以用手手动移动动态刚体,也可以由动态刚体自己受力而自运动.动态物体可以和任何物 ...
- 偏向锁,偏向线程id ,自旋锁
理解锁的基础知识 如果想要透彻的理解Java锁的来龙去脉,需要先了解以下基础知识. 基础知识之一:锁的类型 锁从宏观上分类,分为悲观锁与乐观锁. 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发 ...
- sqlacodegen:通过mysql语句生成sqlalchemy的model
引用网页描述:这个工具读取现有数据库的结构并生成相应的SQLAlchemy模型代码. 使用方法详细描述在如下连接中. 先简要介绍使用方法: 安装:pip install sqlacodegen sq ...
- eclipse远程调试Tomcat方法(转)
转自:http://blog.csdn.net/afgasdg/article/details/9236877 1.Linux中配置tomcat在catalina.sh中添加如下CATALINA_OP ...
- Ubuntu下下载使用sublime
使用Sublime真心很舒服.安装方法很简单,如下 进入官网http://www.sublimetext.com/2下载你的Sublime Text 2,然后解压文件. 把解压后得到的文件移动到/us ...
- CSS 3D 的魅力
作者 | 子慕大诗人 来源 | www.cnblogs.com/1wen/p/9064011.html 前言: 最近玩了玩用css来构建3D效果,写了几个demo,所以博客总结一下. 在阅读 ...
- python3 线程调用与GIL 锁机制
转载
- 百度语音 python
python实现语音识别 我们用到是百度语音识别,因为不掏钱哈哈!首先去百度官网去创建你的 APPID AK SK 这个网上很多大家没创建的自己看下 目前本SDK的功能同REST API,需要联网调用 ...
- 双目立体匹配经典算法之Semi-Global Matching(SGM)概述:匹配代价计算之互信息(Mutual Information,MI)
半全局立体匹配算法Semi-Global Matching,SGM由学者Hirschmüller在2005年所提出1,提出的背景是一方面高效率的局部算法由于所基于的局部窗口视差相同的假设在很多情况 ...