1. 程式人生 > >17.玩轉Spring Boot 整合Dubbo

17.玩轉Spring Boot 整合Dubbo

玩轉Spring Boot 整合Dubbo

      使用Spring Boot 與Dubbo整合,這裡我之前嘗試了使用註解的方式,簡單的使用註解註冊服務其實是沒有問題的,但是當你涉及到使用註解的時候在服務裡面引用事務,注入其他物件的時候,會有一些問題。於是我就果斷放棄了註解了,使用的是XML,這裡可能介紹的是Dubbo,但是如果使用Dubbox的話,基本上是相容的。接下來,將說說使用XML的方式與Spring Boot在一起開發。

1.建立工程在pom.xml中加入依賴

      建立工程名為:       (1)springboot-dubbo-provide       (2)springboot-dubbo-api       (3)springboot-dubbo-consume         springboot-dubbo-api工程主要是放一些service介面,用於提供給消費者使用 。springboot-dubbo-provide工程用於提供服務。  springboot-dubbo-consume工程為消費者。在springboot-dubbo-provide工程中開啟pom.xml加入以下依賴,完整程式碼如下:
<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.chengli</groupId>
	<artifactId>springboot-dubbo-provide</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>springboot-dubbo-provide</name>
	<url>http://maven.apache.org</url>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.3.RELEASE</version>
	</parent>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<java.version>1.8</java.version>
		<com.alibaba.dubbo.version>2.5.3</com.alibaba.dubbo.version>
		<org.apache.zookeeper.version>3.4.6</org.apache.zookeeper.version>
		<com.github.sgroschupf.zkclient.version>0.1</com.github.sgroschupf.zkclient.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>com.chengli</groupId>
			<artifactId>springboot-dubbo-api</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<!-- dubbo -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
			</exclusions>
			<version>${com.alibaba.dubbo.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>${org.apache.zookeeper.version}</version>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>${com.github.sgroschupf.zkclient.version}</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

開啟springboot-dubbo-consume工程,在pom.xml中加入以下依賴,完整程式碼如下:
<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.chengli</groupId>
	<artifactId>springboot-dubbo-consume</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>springboot-dubbo-consume</name>
	<url>http://maven.apache.org</url>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.3.RELEASE</version>
	</parent>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<java.version>1.8</java.version>
		<com.alibaba.dubbo.version>2.5.3</com.alibaba.dubbo.version>
		<org.apache.zookeeper.version>3.4.6</org.apache.zookeeper.version>
		<com.github.sgroschupf.zkclient.version>0.1</com.github.sgroschupf.zkclient.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>com.chengli</groupId>
			<artifactId>springboot-dubbo-api</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- dubbo -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
			</exclusions>
			<version>${com.alibaba.dubbo.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>${org.apache.zookeeper.version}</version>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>${com.github.sgroschupf.zkclient.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

2.Dubbo配置

2.1springboot-dubbo-provide服務提供者

      (1)在springboot-dubbo-provide專案中建立入口啟動類MainConfig,完整程式碼如下:
package com.chengli.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MainConfig {
	public static void main(String[] args) {
		SpringApplication.run(MainConfig.class, args);
		try {
			System.in.read();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

      (2)建立Dubbo配置類
package com.chengli.springboot.dubbo;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.annotation.PropertySource;

@Configuration
@PropertySource("classpath:dubbo/dubbo.properties")
@ImportResource({ "classpath:dubbo/*.xml" })
public class DubboConfig {

}
     (3)建立Dubbo配置檔案 在src/main/resources下新建資料夾dubbo,並加入以下配置: dubbo-provider.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: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">

	<!-- 提供方應用資訊,用於計算依賴關係 -->
	<dubbo:application name="${dubbo.application.name}" />

	<!-- 註冊中心暴露服務地址 -->
	<!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
	
   <!-- <dubbo:registry protocol="zookeeper" address="10.170.219.98:2181,10.173.55.173:2181" /> -->
   <dubbo:registry protocol="${dubbo.registry.protocol}" address="${dubbo.registry.address}" />

	<!-- 暴露服務 -->
	<dubbo:protocol name="${dubbo.protocol.name}" port="${dubbo.protocol.port}" />
	
	<dubbo:service interface="com.chengli.springboot.example.service.ExampleService"
		ref="exampleServiceImpl" retries="0" timeout="6000" />
</beans>
    注意:這裡我釋出的example服務是示例,具體的根據實際修改

    (4)建立dubbo.properties
#應用名稱
dubbo.application.name=example-provider
#註冊中心型別
dubbo.registry.protocol=zookeeper
#註冊中心地址
dubbo.registry.address=127.0.0.1:2181
#暴露服務方式
dubbo.protocol.name=dubbo
#暴露服務埠
dubbo.protocol.port=20880

2.2springboot-dubbo-consume服務消費者

    (1)建立入口啟動類MainConfig
package com.chengli.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MainConfig {
	public static void main(String[] args) {
		SpringApplication.run(MainConfig.class, args);
	}
}

    (2)建立Dubbo配置類
package com.chengli.springboot.dubbo;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.annotation.PropertySource;

@Configuration
@PropertySource("classpath:dubbo/dubbo.properties")
@ImportResource({ "classpath:dubbo/*.xml" })
public class DubboConfig {

}

    (3)建立Dubbo配置檔案 在src/main/resources下新建資料夾dubbo,並加入以下配置: dubbo-consume.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: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">

	<!-- 提供方應用資訊,用於計算依賴關係 -->
	<dubbo:application name="${dubbo.application.name}" />

	<!-- 註冊中心暴露服務地址 -->
   <dubbo:registry protocol="${dubbo.registry.protocol}" address="${dubbo.registry.address}" />
	
	<dubbo:reference id="axempleService" interface="com.chengli.springboot.example.service.ExampleService" />
</beans>
         (4)建立dubbo.properties
#應用名稱
dubbo.application.name=example-consume
#註冊中心型別
dubbo.registry.protocol=zookeeper
#註冊中心地址
dubbo.registry.address=127.0.0.1:2181

到這裡基本上就已經可以了,不過測試類的程式碼我就不貼上來了。只要在API中定義介面實現即可。使用Spring Boot 與Dubbo整合的時候,需要注意的是,不要使用Spring Boot提供的devtools熱啟動,因為devtools提供了兩個ClassLoader,載入策略問題導致出現錯誤,無法啟動。如果開發中需要熱載入,那麼使用Spring 提供的springloaded。 有興趣的朋友可以加群探討相互學習:

Spring Boot QQ交流群:599546061

相關推薦

17.Spring Boot 整合Dubbo

玩轉Spring Boot 整合Dubbo       使用Spring Boot 與Dubbo整合,這裡我之前嘗試了使用註解的方式,簡單的使用註解註冊服務其實是沒有問題的,但是當你涉及到使用註解的時候在服務裡面引用事務,注入其他物件的時候,會有一些問題。於是我就果斷放棄

Spring Boot 集成Dubbo

ext 入口 1.8 bat .proto 中心 group autoconf spa 玩轉Spring Boot 集成Dubbo 使用Spring Boot 與Dubbo集成,這裏我之前嘗試了使用註解的方式,簡單的使用註解註冊服務其實是沒有問題的,但

spring-boot整合dubbo:Spring-boot-dubbo-starter

hub pack 自動配置 china end service get exceptio 整合 為什麽要寫這個小工具 如果你用過Spring-boot來提供dubbo服務,相信使用中有很多“不爽”的地方。既然使用spring boot,那麽能用註解的地方絕不用xml配置,這

Spring Boot 整合 Dubbo和Zookeeper

prop pre mode epo con implement 應用 del www. Spring Boot 整合 Dubbo和Zookeeper Spring Boot 整合 Dubbo和Zookeeper 環境介紹 Zookeeper 安裝 啟動 D

spring boot——開篇

理解 帶來 時間 玩轉 java 好用 實踐 體系 一個個 很久沒寫博客了,而這一轉眼就是7年。這段時間並不是我沒學習東西,而是園友們的技術提高的非常快,這反而讓我不知道該寫些什麽。我做程序已經有十幾年之久了,可以說是徹徹底底的“程序老炮”,至於技術怎麽樣?我個人認為是非常

Spring Boot整合Dubbo框架demo

  Dubbo框架原理見之前的博文:http://www.cnblogs.com/umgsai/p/5836925.html 首先啟動zookeeper Server端 Pom配置如下 <?xml version="1.0"?> <project xm

spring boot整合dubboSpring boot +Dubbo,簡易的配置方式

        剛做完一個基於motan的專案不久,便去看看dubbo的新特性了,dubbo自上年9月恢復更新到現在大概半年多,發現已經有和spring boot整合的配置了。個人喜歡的配置方式優先順序一般都是資原始

spring boot整合dubbo加入mybatis,mybatisplus(Client)

首先我們先用myeclipse建立一個maven專案(可直接去dubbo官網生成http://start.dubbo.io/)。 目錄結構: 接下來複制一下pom配置(根據自己所需) <project xmlns="http://maven.apache.or

Spring Boot 整合dubbo與zookeeper實現不同專案之間資料通過服務的傳遞

一、安裝zookeeper 1、下載路徑:http://mirrors.hust.edu.cn/apache/zookeeper/ 可以自己選擇版本進行下載(同時支援windows和linux) 2、目錄結構 3、修改conf下的配置檔案zoo.cfg 4、

spring boot整合dubbo

spring boot整合dubbo spring-boot-start-dubbo spring-boot-start-dubbo,讓你可以使用spring-boot的方式開發dubbo程式。使dubbo開發變得如此簡單。 如何使用 1. clone 程式碼(可選,已經發布到中央倉

9.Spring Boot 全域性異常處理@ControllerAdvice

玩轉Spring Boot 全域性異常處理@ControllerAdvice       在開發中出現異常後,可能需要一個統一處理的地方,來處理程式出現的異常,針對不同的異常做不同的處理,這裡我們通過@ExceptionHandler註解來實現。在WEB開發中,比如頁面出

14.Spring Boot 多資料來源

玩轉Spring Boot 多資料來源       在專案中有的時候需要用到多個數據源,有個問題就是單資料來源的事務是沒有問題的,多資料來源是會存在事務問題的。這裡不做事務講解,事務可以用JTA分散式事務,也可以用MQ。具體不做敘述,接下來說如何實現多資料來源並且使用A

Spring Boot整合Dubbo執行

原文地址:http://www.cnblogs.com/whthomas/p/running-dubbo-on-spring-boot.html Dubbo(http://dubbo.io/) 是阿里的開源的一款分散式服務框架。而Spring Boot則是Sprin

Spring Boot 註冊Servlet、Filter、Listener

玩轉Spring Boot 註冊Servlet、Filter、Listener JAVA架構師Ya七月 2019-0

Spring-Boot整合freemarker引入靜態資源css、js等(

mark pan 創建 line path main 實現 content -m 一、概述springboot 默認靜態資源訪問的路徑為:/static 或 /public 或 /resources 或 /META-INF/resources 這樣的地址都必須定義在src/

Spring BootDubbo整合

  程式碼demo http://git.oschina.net/zhangxh20/spring-boot-dubbo 專案共分成4個模組 dubbo-api dubbo-dao dubbo-service dubbo-web dubbo-

Spring Boot使用dubbo-spring-boot-starter整合Dubbo

簡介: Dubbo Spring Boot 工程致力於簡化 Dubbo RPC 框架在 Spring Boot 應用場景的開發。同時也整合了 Spring Boot 特性: 自動裝配 (比如: 註解驅動, 自動裝配等). Production-Ready (比如

spring bootdubbo 2.8.4整合的一些問題

         對於spring boot也支援xml配置的方式,所以如果使用dubbo註解這是不叫簡單的方式,只需要對spring boot 的啟動類的頭部加上@ImportResource(locations = {"配置檔案的位置"}),這樣就搞定了,在配置後發現啟

Spring Boot 整合 Apache Dubbo

`Apache Dubbo`是一款高效能、輕量級的開源 `Java` `RPC` 框架,它提供了三大核心能力:面向介面的遠端方法呼叫,智慧容錯和負載均衡,以及服務自動註冊和發現。 > 注意,是 `Apache Dubbo`,不再是 `Alibaba Dubbo`。簡單來說就是 `Alibaba` 將

Spring Boot 整合 Elasticsearch,實現 function score query 權重分查詢

search 小寫 業務 jpg 啟動會 last cti cal agen 摘要: 原創出處 www.bysocket.com 「泥瓦匠BYSocket 」歡迎轉載,保留摘要,謝謝! 『 預見未來最好的方式就是親手創造未來 – 《史蒂夫·喬布斯