文档章节

spring boot 学习笔记(3) 整合dubbo

小镇刁民
 小镇刁民
发布于 2017/01/17 13:26
字数 1256
阅读 54
收藏 2

Dubbo 是阿里巴巴开源的分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,被广泛用于国内的互联网公司,基于dubbo诸多优秀的特性,我们选用dubbo作为当前项目的分布式服务框架。

  • 首先,我们需要加入dubbo的maven相关依赖,
  1. dubbo官方在很长一段时间都没有更新维护,我们暂时选择由当当网维护的dubbox(dubbox在dubbo的基础上进行了扩展、升级了一些第三方依赖包,并且修复了一些bug。刚刚在github上看了一下dubbo官方最近一次更新是在7个月前,貌似将spring 的版本升级到了3.x,并且支持jdk8)。
  2. dubbox没有上传到maven中央仓库,需要手动编译源码;dubbox 采用的spring版本为3.2.10,而我们当前的项目采用springboot 1.3.6,所依赖的spring版本为4.2.7,所以我们需要将dubbox所依赖的spring版本升级到4.2.7以避免出现冲突,另外引入dubbox 其中slf4j相关包也跟现有项目配置有所冲突需要升级,具体配置如下:
<?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">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.spbd</groupId>
  <artifactId>spbd</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <modules>
    <module>spbd-core</module>
    <module>spbd-order</module>
  </modules>
  <properties>
  	<springboot.version>1.3.6.RELEASE</springboot.version>
  	<spring.version>4.2.7.RELEASE</spring.version>
  </properties>
  <dependencies>
  </dependencies>
  <dependencyManagement>
  	<dependencies>
  		<dependency>
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-starter-web</artifactId>
		    <version>${springboot.version}</version>
		</dependency>
		<dependency>    
			<groupId>org.springframework.boot</groupId>    
			<artifactId>spring-boot-starter-jdbc</artifactId>
			<version>${springboot.version}</version>
	    </dependency>
	    <dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
	    <dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.34</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-core</artifactId>
			<version>1.3.2</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.14</version>
		</dependency>
		<dependency>
		    <groupId>com.alibaba</groupId>
		    <artifactId>dubbo</artifactId>
		    <version>2.8.4</version>
		    <exclusions> 
				<exclusion>  
					<groupId>org.javassist</groupId>  
					<artifactId>javassist</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.alibaba</groupId>
					<artifactId>fastjson</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.hibernate</groupId>
					<artifactId>hibernate-validator</artifactId>
				</exclusion>
				<exclusion>
	                <artifactId>spring</artifactId>
	                <groupId>org.springframework</groupId>
	            </exclusion>
			</exclusions>  
		</dependency> 
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.21</version>
		</dependency>
		<dependency>
			<groupId>org.javassist</groupId>
			<artifactId>javassist</artifactId>
			<version>3.20.0-GA</version>
		</dependency>
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.10</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
  	</dependencies>
  </dependencyManagement>
</project>
  • dubbo 使用zookeeper作为服务注册中心,我们从官网下载一个最新版本,并启动它。下载地址:http://zookeeper.apache.org/releases.html#download
  • 新增子项目spbd-user,并在spbd-user中依赖spbd-core,后面将会在spbd-user中和spbd-order中相互调用对方提供的服务(只是为了测试)。
  • 新增子项目spbd-wsapi,所有对外暴露的服务接口都定义在这个子项目中,每个对外暴露服务的子项目或者需要访问其它子项目提供服务的子项目,都需要依赖它,各个服务的输入输出都定义在这个子项目中。
  • 在spbd-order和spbd-user中配置dubbo
  1. 创建dubbo-config.xml,具体配置如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
       					http://www.springframework.org/schema/beans/spring-beans.xsd
    					http://code.alibabatech.com/schema/dubbo
    					http://code.alibabatech.com/schema/dubbo/dubbo.xsd
    					http://www.springframework.org/schema/context
       					http://www.springframework.org/schema/context/spring-context.xsd">
    
    <dubbo:application name="spbd-order"  />
    <dubbo:protocol name="dubbo" port="${dubbo.service.port}" />
    <dubbo:consumer check="false" />
    <dubbo:provider timeout="30000" retries="1" cluster="failover" async="false"/>
    <dubbo:registry protocol="zookeeper" address="${dubbo.registerAddress}" check="false"/>
    <dubbo:annotation package="com.spbd.order" /> 
</beans>    
  1. spring boot默认是不用配置xml,但是上面dubbo的配置我们采用了xml配置,所以需要@ImportResource注解,将dubbo-config.xml配置引入进来。
  2. 在application.properties中加入dubbo配置项
dubbo.service.port=21880
dubbo.registerAddress=127.0.0.1:2181
  • 在spbd-wsapi中创建对外的服务接口,并在对应子项目中实现该接口。为了统一,子项目中对外的接口都写在ws目录下,接口实现类以XXXWSService命名。spbd-wsapi结构如下:
    输入图片说明
  1. 我们首先在spbd-order中创建OrderWSService实现IOrderService接口,并在spbd-order的dubbo-config.xml中声明dubbo对外的服务
<dubbo:service interface="com.spbd.wsapi.order.IOrderService" ref="orderWSService"  protocol="dubbo"  cluster="failover"/>
  1. 然后在spbd-user中创建UserWSService实现IUserService接口,在spbd-user的dubbo-config.xml中声明dubbo对外的服务
 <dubbo:service interface="com.spbd.wsapi.user.IUserService" ref="userWSService"  protocol="dubbo"  cluster="failover"/>

现在所有的配置项都已经配置好,我们首先在spbd-user中的UserController中通过dubbo的@Reference注解注入IOrderService接口,然后写个rest接口测试一下。

package com.spbd.user.controller;
package com.spbd.user.controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.dubbo.config.annotation.Reference;
import com.spbd.wsapi.order.IOrderService;
@RequestMapping("/user")
@RestController
public class UserController {
	@Reference
	private IOrderService orderService;
	@RequestMapping("/order/{id}")
	public Object hello(@PathVariable("id")Integer id){
		return orderService.getOrderById(id);
	}
}

OK,万事俱备,启动spbd-user和spbd-order(注:spbd-user当前web访问端口为8081) 通过浏览器访问:http://localhost:8081/user/order/1 成功获取到对应的order数据,证明dubbo调用成功。同样在order中通过dubbo的@Reference注解注入IUserService,如果能正确返回数据说明dubbo调用成功。

https://github.com/sergewu/spbd

2017/07/31 dubbo官方宣布将继续重点维护

THE END

© 著作权归作者所有

共有 人打赏支持
小镇刁民
粉丝 3
博文 12
码字总数 7394
作品 0
成都
后端工程师
私信 提问
spring boot整合dubbo

github: https://github.com/Athlizo/spring-dubbo-parent 码云: https://git.oschina.net/null5843382/spring-dubbo-parent 相关文档: Spring Dubbo 开发笔记(一)——概述: Spring Dub......

lizo
2017/03/01
0
6
Spring Cloud 入门教程:聊聊Spring Cloud

一、 Spring Cloud 是什么? Spring Cloud 是将分布式系统中一系列基础框架/工具进行整合的框架。其中包含:服务注册与发现、服务网关、熔断器、配置中心、消息中心、服务链路追踪等等。 Sp...

吴伟祥
2018/12/03
0
0
最新官方版的SpringBoot 整合 Dubbo

上次的那个springboot和dubbo的整合版本中,dubbo的版本是2.5.3,它的Service注解和事务不能同时使用,会造成扫描失效,2.6.2的dubbo版本已经纠正了此不便,官方也给出了与springboot整合的q...

FantJ
2018/06/09
0
0
深入 Spring Boot : 快速集成 Dubbo + Hystrix

背景 Hystrix 旨在通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以...

小致dad
2018/07/02
0
0
Dubbo Spring Boot 0.1.0,Dubbo 的 Spring Boot 简化整合

Dubbo Spring Boot 0.1.0 已发布,Dubbo Spring Boot Starter 致力于简化 Dubbo 应用在 Spring Boot 环境中的开发,主要包括自动装配(Auto-Configure)、外部化配置(Externalized-Configur...

淡漠悠然
2018/03/20
2K
7

没有更多内容

加载失败,请刷新页面

加载更多

漏洞防御与修复工作

漏洞管理工作是企业安全建设必不可少的一环,在风险管理工作中,漏洞管理能够防患于未然,企业对漏洞管理有着广泛的基础建设和实践经验。但随着攻防技术的发展,传统漏洞管理的安全技术和管理...

linuxprobe16
8分钟前
0
0
MicroPython技术及应用前景

1 Micropython技术是什么? MicroPython极精简高效的实现了Python3语言。它包含Python标准库的一小部分,能在单片机和受限环境中运行。 1.1 MicroPython发展 由剑桥大学的理论物理学家乔治....

bodasisiter
14分钟前
0
0
跟我学Spring Cloud(Finchley版)-13-通用方式使用Hystrix

本节详细讲解使用Hystrix的通用方式。 简介 Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主要...

周立_ITMuch
23分钟前
0
0
🛠️Hanjst/汉吉斯特更新加JavaScript运行时优化等

这是 Hanjst/汉吉斯特 发布以来的首个主要升级更新版本。这次的主要升级更新的内容包括移除HTML Comments注释行, 优化在 Hanjst include模板文件时的JavaScript运行时环境。 Hanjst 在设计和...

wadelau
今天
2
0
OSChina 周六乱弹 —— 舔狗是没有好下场的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听什么# #今天听这个# 分享 Nirvana 的歌曲《Smells Like Teen Spi...》 《Smells Like Teen Spi...》- Nirvana 手机党少...

小小编辑
今天
438
13

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部