5 springboot 集成dubbo
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的更多相关文章
- SpringBoot集成Dubbo
(1).新建一个普通Maven项目,用于存放一些公共服务接口及公共的Bean等. 项目: 公共Bean: package cn.coreqi.entities; import java.io.Seri ...
- SpringBoot集成dubbo实例
项目总览图: 最下面有项目的pom,具体内容: 项目运行注意事项: 先启动 provider, 将providers.xml中 port 先修改为20187 执行test目录 下的DubboProvi ...
- springboot 集成 dubbo(一)简介
一.简介 1,springboot 是 一款快速开发的框架,减少了开发人员对配置文件的操作.采用一些注解来取代xml配置文件. 注解包含预先封装的注解和开发人员自定义注解.同时使用Maven.Grad ...
- dubbo入门和springboot集成dubbo小例子
从零开始搭建springboot-dubbo的例子 Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案 一. Dubbo的简单介绍 1. ...
- 又陷入知识盲区了,面试被问SpringBoot集成dubbo,我当时就懵了
前言 前两天在和粉丝聊天的时候,粉丝跟我说之前在面试的时候被问到SpringBoot这一块的知识被问的有点懵,和我问了不少这方面的东西.事后我想了想不如把这些东西分享出来吧,让更多的人看到,这样不管是 ...
- springboot集成dubbo服务报错No provider available for the service
检查了下发现是因为没有正确编写暴露服务的注解,需要注意下: @Service(interfaceClass = StudentService.) @Component public class Stu ...
- SpringBoot集成Dubbo+Zookeeper
目录 Spring版本 dubbo_zookeeper负责定义接口 dubbo_provider 服务提供者 dubbo_consumer服务使用者 Spring版本 不知道为啥,新创建的Spring ...
- springboot 集成dubbo
- springboot整合dubbo+zookeeper最新详细
引入 最近和小伙伴做一个比赛,处于开发阶段,因为涉及的服务比较多,且服务需要分开部署在不同的服务器上,讨论之后,打算采用分布式来做,之前学习springboot的时候,部分章节涉及到了springbo ...
随机推荐
- HTML Strip Char Filter
The html_strip character filter strips HTML elements from the text and replaces HTML entities with t ...
- Elasticsearch5.4 删除type
首先要说明的是现在的Elasticsearch已经不支持删除一个type了,所以使用delete命令想要尝试删除一个type的时候会出现如下错误,如果存在一个名为edemo的index和tets的ty ...
- MarkDown添加图片的三种方式
插图最基础的格式就是:  Alt text:图片的Alt标签,用来描述图片的关键词,可以不写.最初的本意是当图片 ...
- css变量的应用
微软在2017年3月份宣布 Edge 浏览器将支持 CSS 变量,到现在已经过去一年多了,哈哈,是不是有点后知后觉? 这个知识点是在阮一峰的日志上浏览到的,在此借用一下了..跟大家分享一下..... ...
- windows下Composer因php_openssl扩展缺失而安装失败
Composer(https://getcomposer.org/)是PHP下的一个依赖管理工具.你可以在你的项目中声明你所需要用到的类库,然后Composer会在项目中为你安装它们.如果你了解Nod ...
- 修改Eclipse jdk环境
原因:由于项目原因,要将原有的工程从jdk1.6迁移到jdk1.7 问题:Eclipse默认的jdk环境为jdk1.6 解决方法: 1)首先是安装jdk1.7,以及配置环境变量,在这里就不再说了 2) ...
- Capture Conversion解读
Let G name a generic type declaration with n type parameters A1,...,An with corresponding bounds U1, ...
- Hive 外部表新增字段或者修改字段类型等不生效
标题比较笼统,实际情况是: 对于Hive 的分区外部表的已有分区,在对表新增或者修改字段后,相关分区不生效. 原因是:表元数据虽然修改成功,但是分区也会对应列的元数据,这个地方不会随表的元数据修改而修 ...
- c++ 网络编程(十一) LINUX下 初步制作基于HTTP的WEB服务器
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9663028.html HTTP概要 理解Web服务器端: 编写HTTP(超文本传输协议)服务器 ...
- css3圆形轨迹动画
<!doctype html> <html lang="en"> <head> <meta char ...