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. java中-的流-与操作

    /* 字节输出流  OutputStrema:     * OutputStream抽象类     * write(int b); 将指定的字节写入此流中     * write(byte[] b); ...

  2. netcat 工具传输文件

    因为电脑本地是 windows,多台机器间以 windows 为中介传输文件极度不爽.window 下的 MobaXterm 工具不能使用 sz 和 rz 命令, 而 SecureCRT 工具使用体验 ...

  3. Elasticsearch5.4 删除type

    首先要说明的是现在的Elasticsearch已经不支持删除一个type了,所以使用delete命令想要尝试删除一个type的时候会出现如下错误,如果存在一个名为edemo的index和tets的ty ...

  4. java使用Redis2--保存对象

    Redis中并没有提供set(String key, Object obj)的方法,但提供了set(final byte[] key, final byte[] value) 的方法,可以通过把对象转 ...

  5. mycat引起的insert后马上select不到数据的故障分析

    由于有2个task表t_task和e_task,代码中Insert了t_task后马上select t_task然后把结果Insert到e_task,结果发现经常e_task会没有任何数据. 原因分析 ...

  6. 使用unordered_map提升查找效率

    在对网络数据包流(Flow)进行处理的时候,一开始为了简单使用了vector做为Flow信息的存储容器,当其中的元素达到几十万时,程序的执行速度让人无法忍受.已经对vector进行过合理的预先rese ...

  7. (C/C++) 指向函數的指標

    最近再跟指標做朋友, 正好遇到函數與指標. 其實函數也在程式內也是有屬於自己的位址 所以指標一樣能指向函數, 在此釐清自己的觀念以及記錄下來. #include <stdio.h> #in ...

  8. 博客主题皮肤探索-添加新功能和fiddler的css/js替换

    还有前言 使用了主题之后,发现还差了一点功能.最新评论没有了,导致读者回复需要一点时间去找到底回复了哪条博客.于是就有了添加功能的想法. 如何调试CSS/JS 打开f12,可以看见加载的js资源都是混 ...

  9. LCS and LIS

    LCS #include<bits/stdc++.h> using namespace std; typedef long long ll; int n,m; char s[1005],t ...

  10. (转)DB2和 Oracle的并发控制(锁)比较

    DB2和 Oracle的并发控制(锁)比较 牛 新庄2005 年 12 月 26 日发布 原文:https://www.ibm.com/developerworks/cn/data/library/t ...