Apache Dubbo 是一款高性能Java RPC框架

由阿里巴巴开源并进入Apache孵化器,官网 http://dubbo.apache.org

提供服务化基础功能: 接口远程调用,智能负载均衡,服务发现与注册和运维治理界面等功能

集成SpringBoot中文说明地址 https://github.com/apache/incubator-dubbo-spring-boot-project/blob/master/README_CN.md

我们重新看下项目中的结构,做出如下修改

...somefun

......somefun-web (springboot项目 dubbo客户端)

......somefun-service-system

.........somefun-system-api  (对外提供模块,提供接口和DTO)

.........somefun-system-service (springboot项目 dubbo服务提供端)

1我们将web模块开发成dubbo服务消费端部分

2将web模块中的pom去掉 somefun-system-service 依赖(somefun-system-api 依赖不去掉,通过此模块实现远程调用 而不侵入代码)

3将somefun-system-service模块修改为springboot项目独立运行

服务提供方的代码

somefun-system-service模块

pom文件

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/>
</parent> <modelVersion>4.0.0</modelVersion> <artifactId>somefun-system-service</artifactId>
<dependencies>
<dependency>
<groupId>com.zhj</groupId>
<artifactId>somefun-system-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency> <dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version> <!-- 最新的0.2.1-SNAPSHOT 可以去上边的GitHub地址中下载编译 -->
</dependency> <!-- Dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.5</version>
</dependency>
<!-- Spring Context Extras -->
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>1.0.2</version>
</dependency> </dependencies> </project>

创建启动类SomefunSystemApplication

 @SpringBootApplication (scanBasePackages={"com.zhj.somefun"})
public class SomefunSystemApplication { public static void main(String[] args) { new SpringApplicationBuilder(SomefunSystemApplication.class)
.web(WebApplicationType.NONE) //非web方式运行
.run(args);
} }

TestServiceImpl类:

注意下这时候的Service注解的包要引用 duboo中的service注解

 package com.zhj.somefun.system.service.impl;

 import com.zhj.somefun.system.api.dto.TestDto;
import com.zhj.somefun.system.api.service.TestService; import com.alibaba.dubbo.config.annotation.Service; import java.util.ArrayList;
import java.util.Date;
import java.util.List; @Service
public class TestServiceImpl implements TestService { @Override
public List<TestDto> getTestList() {
List<TestDto> list = new ArrayList<>();
TestDto dto = new TestDto();
dto.setAge(18);
dto.setId(1);
dto.setName("姓名1");
dto.setCreatedate(new Date());
list.add(dto);
return list;
}
}

TestDto类:

要实现Serializable接口

 public class TestDto implements Serializable{
private Integer id;
private String name; public Integer getId() {
return id;
}
…… ……
}

application.yml文件

 server:
port: 6666
spring:
application:
name: dubbo-provider-demo dubbo:
application:
id: dubbo-provider-demo
name: dubbo-provider-demo
monitor:
protocol: registry
protocol:
id: dubbo
name: dubbo
port: 12345
registry:
address: zookeeper://127.0.0.1:2181
id: my-registry
scan:
#扫描server包地址
basePackages: com.zhj.somefun.system.service

服务消费方

我们将web模块改造成dubbo调用方

pom 引入dubbo

 <dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency> <!-- Dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.5</version>
</dependency>
<!-- Spring Context Extras -->
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>1.0.2</version>
</dependency>

Testcontroller控制器类

注解修改为Reference注解类

 @RestController
public class Testcontroller { @Reference
private TestService testService; @GetMapping("/getlist")
public List<TestDto> getlist(){
return testService.getTestList();
} }

application.yml 文件

 dubbo:
application:
id: dubbo-consumer-demo
name: dubbo-consumer-demo
monitor:
protocol: registry
protocol:
id: dubbo
name: dubbo
port: 12345
registry:
address: zookeeper://127.0.0.1:2181
server:
port: 8080
spring:
profiles:
active: dev
application:
name: dubbo-consumer-demo

因为我们注册中心使用的是zookeeper,我们可以在网上下载最新的zookeeper文件,运行起来即可。

运行服务器提供方的项目somefun-system-service

运行消费方的项目somefun-web

访问 http://localhost:8080/getlist ,

我们会发现已经可以返回 JSON数据

[{"id":1,"name":"姓名1","age":18,"createdate":"2018-12-22T06:58:43.535+0000"}]

这说明dubbo已经可以正常运行了

我们在运行项目中的时候编译器可能会打印错误日志

com.alibaba.dubbo.rpc.RpcException: No provider available from registry 127.0.0.1:2181 for service com.alibaba.dubbo.monitor.MonitorService on consumer 192.168.1.73 use dubbo version 2.6.5, please check status of providers(disabled, not registered or in blacklist).

这个因为 dubbo的监控中心没有接入 ,对于这篇代码来说暂时没有影响

这里只是介绍了最简单的springboot 接入dubbo,更新丰富的功能和详解的介绍在dubbo官网

http://dubbo.apache.org/zh-cn/

5 springboot 集成dubbo的更多相关文章

  1. SpringBoot集成Dubbo

    (1).新建一个普通Maven项目,用于存放一些公共服务接口及公共的Bean等. 项目: 公共Bean: package cn.coreqi.entities; import java.io.Seri ...

  2. SpringBoot集成dubbo实例

    项目总览图: 最下面有项目的pom,具体内容: 项目运行注意事项: 先启动 provider, 将providers.xml中 port 先修改为20187 执行test目录 下的DubboProvi ...

  3. springboot 集成 dubbo(一)简介

    一.简介 1,springboot 是 一款快速开发的框架,减少了开发人员对配置文件的操作.采用一些注解来取代xml配置文件. 注解包含预先封装的注解和开发人员自定义注解.同时使用Maven.Grad ...

  4. dubbo入门和springboot集成dubbo小例子

    从零开始搭建springboot-dubbo的例子 Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案 一. Dubbo的简单介绍 1. ...

  5. 又陷入知识盲区了,面试被问SpringBoot集成dubbo,我当时就懵了

    前言 前两天在和粉丝聊天的时候,粉丝跟我说之前在面试的时候被问到SpringBoot这一块的知识被问的有点懵,和我问了不少这方面的东西.事后我想了想不如把这些东西分享出来吧,让更多的人看到,这样不管是 ...

  6. springboot集成dubbo服务报错No provider available for the service

    检查了下发现是因为没有正确编写暴露服务的注解,需要注意下: @Service(interfaceClass = StudentService.) @Component public class Stu ...

  7. SpringBoot集成Dubbo+Zookeeper

    目录 Spring版本 dubbo_zookeeper负责定义接口 dubbo_provider 服务提供者 dubbo_consumer服务使用者 Spring版本 不知道为啥,新创建的Spring ...

  8. springboot 集成dubbo

  9. springboot整合dubbo+zookeeper最新详细

    引入 最近和小伙伴做一个比赛,处于开发阶段,因为涉及的服务比较多,且服务需要分开部署在不同的服务器上,讨论之后,打算采用分布式来做,之前学习springboot的时候,部分章节涉及到了springbo ...

随机推荐

  1. NOI2019省选模拟赛 第六场

    传送门 又炸了-- \(A\) 唐时月夜 不知道改了什么东西之后就\(A\)掉了\(.jpg\) 首先,题目保证"如果一片子水域曾经被操作过,那么在之后的施法中,这片子水域也一定会被操作&q ...

  2. kinect 2 for xbox畸变矫正

    kinect 2 for xbox畸变矫正 畸变校正的详细方法在iai_kinect2/kinect2_calibration的readme文件中. 由于通过kinect2获得的图像数据有不同的模式( ...

  3. 【扫盲】HTML5、Web APP、3G网站、Wap网站傻傻分不清楚

           移动互联网指手机网站和app,其中app分为native app(原生app),web app(html5开发),Hybrid app(前两种app结合):手机网站分为wap网站和3g网 ...

  4. linux下安装nginx,centos安装nginx

    初学nginx,进行简单的安装和配置. 一.依赖 openssl-fips-2.0.9.tar.gz zlib-1.2.11.tar.gz pcre-8.01.tar.gz nginx-1.8.0.t ...

  5. ui4-5

    2016PS第4-5周 图像的高级编辑方法: 4-1.用变换将照片放入相框 1.打开素材文件01-1.jpg 2.执行:文件/置入,选素材01-2.jpg 3.执行:编辑/变换/缩放,缩小照片,暂不退 ...

  6. C# 聊一聊屏保的设置

    初步认识屏保 进入屏保设置 强行开头,大家都知道我们只需要在搜索框打入“屏保”,就能进入屏保的设置选项.然而箭头指向的位置到底是在Windows的哪个地方呢?这就是写这篇博客的原因. 进入一个屏幕保护 ...

  7. Hadoop2.5.0伪分布式环境搭建

    本章主要介绍下在Linux系统下的Hadoop2.5.0伪分布式环境搭建步骤.首先要搭建Hadoop伪分布式环境,需要完成一些前置依赖工作,包括创建用户.安装JDK.关闭防火墙等. 一.创建hadoo ...

  8. ok6410 android driver(1)

    target system : Android (OK6410) host system : Debian Wheezy AMD64 1.Set up android system in ok6410 ...

  9. hadoop-2.6.0.tar.gz的集群搭建(3节点)(不含zookeeper集群安装)

    前言 本人呕心沥血所写,经过好一段时间反复锤炼和整理修改.感谢所参考的博友们!同时,欢迎前来查阅赏脸的博友们收藏和转载,附上本人的链接http://www.cnblogs.com/zlslch/p/5 ...

  10. cors允许的方法和contype-type

    https://fetch.spec.whatwg.org/#cors-safelisted-request-header get head post text/plain multipart/for ...