[轉載,感覺寫的非常詳細]DUBBO配置方式詳解
原文連結:http://www.cnblogs.com/chanshuyi/p/5144288.html
DUBBO 是一個分散式服務框架,致力於提供高效能和透明化的 RPC 遠端服務呼叫方案,是阿里巴巴 SOA 服務化治理方案的核心框架,每天為 2,000+ 個服務提供 3,000,000,000+ 次訪問量支援,並被廣泛應用於阿里巴巴集團的各成員站點。
Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring載入Dubbo的配置即可,Dubbo基於Spring的Schema擴充套件進行載入。
根據 DUBBO 官方文件,配置 DUBBO 有 4 種方式,分別是:
1. XML 配置檔案方式
2. properties 配置檔案方式
3. annotation 配置方式
4. API 配置方式
這裡我們只介紹前兩種方式的配置。
1、XML 配置檔案方式
建立 DubboDemo 專案,並建立 interface 模組、provider 模組、consumer 模組,它們都是 DubboDemo 的子模組。其中 interface 模組存放所有的介面、provider 模組提供服務、consumer 消費服務。建立完成後的專案結構如下:
在 DubboDemo 模組 pom.xml 加入如下依賴,為所有模組提供 JUnit 和 LOG4J 依賴。
<!-- **************************** Properties 配置 ****************************--> <properties> <junit.version>3.8.1</junit.version> </properties> <!-- **************************** /Properties 配置 **************************** --> <dependencies> <!-- **************************** JUnit 依賴 ****************************--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- **************************** /JUnit 依賴 **************************** --> <!-- **************************** 日誌 依賴 **************************** --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.6</version> </dependency> <!-- **************************** /日誌 依賴 **************************** --> </dependencies>
同時在 provider 模組和 consumer 模組的 resources 目錄里加入 log4j.properties 配置檔案:
#Console Log
log4j.rootLogger=info, console, file
# Write to Console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=INFO
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%5p %d{MM-dd HH:mm:ss}(%F:%L): %m%n
#Write to File
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=${catalina.home}log/provider.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%5p %d{MM-dd HH:mm:ss}(%F:%L): %m%n
在 interface 模組中建立介面 com.chanshuyi.service.IUserService:
package com.chanshuyi.service;
/**
* Created by chanshuyi on 2016/1/19.
*/
public interface IUserService {
/**
* 登入方法
* @return 是否登入成功
*/
public boolean login(String username, String password);
}
interface 模組配置完畢。
在 provider 模組中引入 Spring、Dubbo、interface 模組依賴:
<!-- **************************** Properties 配置 **************************** --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>3.8.1</junit.version> <springframework.version>4.1.6.RELEASE</springframework.version> <commonsLogging.version>1.2</commonsLogging.version> </properties> <!-- **************************** /Properties 配置 **************************** --> <dependencies> <!-- **************************** Spring 依賴 **************************** --> <!-- 新增Spring-core包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${springframework.version}</version> </dependency> <!-- 新增spring-tx包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${springframework.version}</version> </dependency> <!-- Spring ORM 相關--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${springframework.version}</version> </dependency> <!-- 新增spring-jdbc包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${springframework.version}</version> </dependency> <!--新增spring-web包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${springframework.version}</version> </dependency> <!-- 新增spring-context包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>${commonsLogging.version}</version> </dependency> <!--新增aspectjweaver包 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.5</version> </dependency> <!-- **************************** /Spring 依賴 **************************** --> <!-- **************************** Dubbo 依賴 **************************** --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.3.3</version> <exclusions> <exclusion> <groupId>com.sun.jmx</groupId> <artifactId>jmxri</artifactId> </exclusion> <exclusion> <groupId>com.sun.jdmk</groupId> <artifactId>jmxtools</artifactId> </exclusion> <exclusion> <groupId>javax.jms</groupId> <artifactId>jms</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- **************************** /Dubbo 依賴 **************************** --> <!-- **************************** interface 依賴 **************************** --> <dependency> <groupId>com.chanshuyi.DubboDemo</groupId> <artifactId>interface</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- **************************** /interface 依賴 **************************** --> </dependencies>
建立 com.chanshuyi.service.impl.UserServiceImpl 類,實現 IUserService 介面:
package com.chanshuyi.service.impl;
import com.chanshuyi.service.IUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* Created by chanshuyi on 2016/1/19.
*/
@Service("userService")
public class UserServiceImpl implements IUserService {
private Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
@Override
public boolean login(String username, String password) {
logger.info("使用者登入:[username:{}, password:{}]", username, password);
if (username != null && password != null && username.equals(password)) {
logger.info("使用者校驗通過。[username:{}]", username);
return true;
}
logger.info("使用者校驗失敗![username:{}]", username);
return false;
}
}
建立 Spring 配置檔案,配置註解掃描 com.chanshuyi.service.impl 包,並引入 spring-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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- **************************** 註解掃描 **************************** --> <context:component-scan base-package="com.chanshuyi.service.impl"/> <!-- **************************** /註解掃描 **************************** --> <!-- **************************** 匯入其他XML檔案 **************************** --> <import resource="spring-provider.xml"/> <!-- **************************** /匯入其他XML檔案 **************************** --> </beans>
注意!這裡不要寫成 com.chanshuyi.service.impl.* 否則無法成功掃描!
建立 spring-provider.xml 檔案,它是 dubbo 的主要配置檔案。
<?xml version="1.0" encoding="UTF-8"?> <!-- 新增 DUBBO SCHEMA --> <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="dubbodemo-provider"/> <!-- 連線到哪個本地註冊中心 --> <dubbo:registry id="dubbodemo" address="zookeeper://localhost:2181"/> <!-- 用dubbo協議在20880埠暴露服務 --> <dubbo:protocol name="dubbo" port="28080"/> <!-- 宣告需要暴露的服務介面 --> <dubbo:service registry="dubbodemo" timeout="3000" interface="com.chanshuyi.service.IUserService" ref="userService"/> </beans>
可以看到這裡有幾個關鍵引數:application、registry、protocol、service。application 指當前應用名稱,主要用來給 zookeeper 註冊中心計算應用間依賴關係。registry 用來宣告一個註冊中心,這裡聲明瞭一個id 為 registry 的註冊中心,地址是本地伺服器的 2181 埠(這裡要與 zookeeper 配置檔案的 clientPort 屬性值一致)。protocol 指該應用用 dubbo 協議在 28080 埠暴露服務,其他應用可以通過這個介面呼叫服務。service 用來宣告需要暴露的服務介面,這裡暴露了IUserService 介面,並將介面註冊到 id 為 dubbodemo 的註冊中心,它引用了 Spring 中名為 userService 的類,超時時間為 3 秒。到這裡 provider 提供者的配置基本上完成,但我們還需要寫一個啟動類將 provider 啟動起來提供服務。
建立 com.chanshuyi.util.BeanFactoryUtil.java,是載入 Spring 的工具類:
package com.chanshuyi.util; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class BeanFactoryUtil { private static ApplicationContext ctx_producer = null; public final static String ApplicationContextRoot = ""; public final static String ApplicationContextPath = ApplicationContextRoot + "applicationContext.xml"; public static void init() { if (ctx_producer == null) { synchronized (BeanFactoryUtil.class) { if(ctx_producer == null){ String[] configLocations = new String[]{ApplicationContextPath}; ctx_producer = new ClassPathXmlApplicationContext(configLocations); } } } } public static ApplicationContext getContext() { init(); return ctx_producer; } }
建立 com.chanshuyi.util.SystemDetails.java,用於輸出系統資訊:
package com.chanshuyi.util; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; public class SystemDetails { /** * 輸出系統基本資訊 */ public static void outputDetails() { timeZone(); currentTime(); os(); } /** * 輸出系統時區 */ private static void timeZone() { Calendar cal = Calendar.getInstance(); TimeZone timeZone = cal.getTimeZone(); System.out.println("系統時區:" + timeZone.getDisplayName()); } /** * 輸出系統時間 */ private static void currentTime() { String fromFormat = "yyyy-MM-dd HH:mm:ss"; SimpleDateFormat format = new SimpleDateFormat(fromFormat); Date myDate = new Date(); System.out.println("系統時間:" + format.format(myDate)); } /** * 輸出系統基本配置 */ private static void os() { String osName = System.getProperty("os.name"); //作業系統名稱 System.out.println("當前系統:" + osName); String osArch = System.getProperty("os.arch"); //作業系統構架 System.out.println("當前系統架構" + osArch); String osVersion = System.getProperty("os.version"); //作業系統版本 System.out.println("當前系統版本:" + osVersion); } }
建立 com.chanshuyi.Launcher.java,用於啟動 provider 服務,是啟動入口:
package com.chanshuyi; import com.chanshuyi.util.BeanFactoryUtil; import com.chanshuyi.util.SystemDetails; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class Launcher { private static Log logger = LogFactory.getLog(Launcher.class); /** * @param args */ public static void main(String[] args) { System.out.println("======================="); System.out.println(" Core包啟動 "); SystemDetails.outputDetails(); System.out.println("======================="); getLocalip(); // 初始化spring logger.info("開始初始化core服務"); BeanFactoryUtil.init(); try{ System.in.read(); } catch (Exception e) { e.printStackTrace(); } } /** * 取得本機ip地址 注意:Spring RmiServiceExporter取得本機ip的方法:InetAddress.getLocalHost() */ private static void getLocalip() { try { System.out.println("服務暴露的ip: " + java.net.InetAddress.getLocalHost().getHostAddress()); } catch (Exception e) { System.out.println(e.getMessage()); } } }
到這裡 provider 模組配置結束。我們執行 Launcher.main() 方法啟動服務,並開啟 zookeeper 註冊中心(點選這裡下載,雙擊 bin/zkServer.cmd 執行即可),啟動 provider 服務。
接下來我們編寫 consumer 程式碼。
在 consumer 的 pom.xml 中匯入 Spring、dubbo、interface 模組依賴
<!-- **************************** Properties 配置 **************************** --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>3.8.1</junit.version> <springframework.version>4.1.6.RELEASE</springframework.version> <commonsLogging.version>1.2</commonsLogging.version> </properties> <!-- **************************** /Properties 配置 **************************** --> <dependencies> <!-- **************************** Spring 依賴 **************************** --> <!-- 新增Spring-core包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${springframework.version}</version> </dependency> <!-- 新增spring-tx包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${springframework.version}</version> </dependency> <!-- Spring ORM 相關--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${springframework.version}</version> </dependency> <!-- 新增spring-jdbc包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${springframework.version}</version> </dependency> <!--新增spring-web包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${springframework.version}</version> </dependency> <!-- 新增spring-context包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${springframework.version}</version> </dependency>相關推薦
[轉載,感覺寫的非常詳細]DUBBO配置方式詳解
原文連結:http://www.cnblogs.com/chanshuyi/p/5144288.html DUBBO 是一個分散式服務框架,致力於提供高效能和透明化的 RPC 遠端服務呼叫方案,是阿里巴巴 SOA 服務化治理方案的核心框架,每天為 2,000+ 個服務提供 3,000,000,000+ 次訪
Dubbo配置檔案詳解
依賴的jar 理論上Dubbo可以只依賴JDK,不依賴於任何三方庫執行,只需配置使用JDK相關實現策略。 預設依賴(系統預設) 通過mvn dependency:tree > dep.log命令(Eclipse或Linux命令列)分析,Dubbo預設依賴以下三
dubbo 配置檔案詳解
<dubbo:service/> 服務配置,用於暴露一個服務,定義服務的元資訊,一個服務可以用多個協議暴露,一個服務也可以註冊到多個註冊中心。eg、<dubbo:service ref="demoService" interface="com.unj.dub
Ribbon的幾種配置方式詳解
文章目錄 Ribbon的自定義配置(java程式碼方式)生效條件 Ribbon的注意事項 0、Ribbon的自定義配置優先順序: 1、自定義配置時,@Configuration和@ComponentScan包不應重疊 2、使用R
無意中找到的一篇關於面試的文章,感覺寫的很好!
“身邊總是存在各種各樣的可能,而自身又具備這樣的能力,就忍不住想試一試。” ---《挪威的森林》 經歷過Honeywell(霍尼維爾)、CA(冠群)、Nortelnetworks(北電網路)、HP(惠普)、RocketSoftware(凌翔創意)和Qilinsoft(麒麟遠創)的面試,也參加過微軟亞洲研究院的
Spring中的JDBCTemplate使用(非常詳細的配置過程)
Spring中的JDBCTemplate使用 資料庫準備: 建立資料庫 建立表: Java程式碼: 1、建立web 工程 springJdbcTemplate 2、新增Spring能力 在此需要將jdbc包也同時加入 3、配置上mysql的連線驅動(拷
一份MyBatis-Generator非常詳細的配置檔案
今天在簡書中看到一篇非常詳細的MyBatis-Generator配置檔案,帶有非常詳細的註釋說明 在使用MBG工具時可充當參考文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE gener
CentOS7安裝mysql5.7.19的手順,步驟(非常詳細)
CentOS7安裝mysql5.7.19手順 1.首先確認系統是否已經安裝了mysql或者mariaDB rpm -qa | grep mysql rpm -qa | grep mariaDB 2.如果有相關安裝包,則立即解除安裝 rpm -e --nodeps 安裝包名稱
全網最詳細的Ceph14.2.5叢集部署及配置檔案詳解,快來看看吧! -- <2>
部署Ceph叢集 Ceph版本選擇 Ceph版本來源介紹 Ceph 社群最新版本是 14,而 Ceph 12 是市面用的最廣的穩定版本。 第一個 Ceph 版本是 0.1 ,要回溯到 2008 年 1 月。多年來,版本號方案一直沒變,直到 2015 年 4 月 0.94.1 ( Hammer 的第一個修正版)
Linux隨手記 - Linux LVM邏輯卷配置過程詳解 [轉載]
就是 ebo post spa part 查詢 swa google ron 許多Linux使用者安裝操作系統時都會遇到這樣的困境:如何精確評估和分配各個硬盤分區的容量,如果當初評估不準確,一旦系統分區不夠用時可能不得不備份、刪除相關數據,甚至被迫重新規劃分區並重裝操作系統
【轉載】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.
轉載:Torch7在Ubuntu下的安裝與配置教程詳解(torch入門使用)
原文;https://www.aliyun.com/jiaocheng/147256.html 摘要:Torch7的本系列教程的主要目的是介紹Torch的入門使用。今天首先分享一下Torch7的安裝。(在Ubuntu14.04安裝torch7)為什麼選擇TorchTo
spring配置檔案詳解--真的蠻詳細
spring配置檔案詳解--真的蠻詳細 轉自: http://book.51cto.com/art/201004/193743.htm 此處詳細的為我們講解了spring2.5的實現原理,感覺非常有用
Nginx實戰之1.1-1.6 Nginx介紹,安裝及配置檔案詳解
1.1 Nginx介紹 HTTP協議發展簡史 加粗 https://coding.net/u/aminglinux/p/nginx/git/blob/master/http/version.md 1991年釋出0.9版,只有GET方法,僅支援html,一個連線一個請求 &n
【轉載】SSH伺服器端/etc/ssh/sshd_conf配置檔案詳解
[[email protected] ~]$cat /etc/ssh/sshd_config #Port 22
Dubbo(配置篇):常用配置總結(配置檔案詳解)
1.暴露服務,定義服務資訊 服務配置,用於暴露一個服務,定義服務的元資訊,一個服務可以用多個協議暴露,一個服務也可以註冊到多個註冊中心。 <dubbo:service id="sendSmsSOAService" interface="com.sms.api.service.Sen
java環境變數 的配置與詳解(全網最詳細教程)
筆者這學期開始學習java課程,學習java開發首先需要配置java執行環境變數。雖然上課老師也講了如何配置java環境變數,可是筆者的同學還是有好多都不會配置,所以筆者最近配置了特別多次java環境變數。如下筆者詳細解釋從JDK安裝到環境變數的裝配。 目錄
轉載:SpringBoot非官方教程 | 第二篇:Spring Boot配置檔案詳解
springboot採納了建立生產就緒Spring應用程式的觀點。 Spring Boot優先於配置的慣例,旨在讓您儘快啟動和執行。在一般情況下,我們不需要做太多的配置就能夠讓spring boot正常執行。在一些特殊的情況下,我們需要做修改一些配置,或者需要
linux系統下top命令的詳細用法、引數詳解、以及模式配置
用過linux系統的人都知道top命令,它是Linux下一個最常用的效能分析工具,能夠實時顯示系統中各個程序的資源佔用狀況,類似於Windows的工作管理員。 top顯示系統當前的程序和其他狀況,是一個動態顯示過程,即可以通過使用者按鍵來不斷重新整理當前狀態。如果在前臺執行該命令,它
配置nginx方向代理,實現URL隱形轉發 (附帶nginx配置檔案詳解)
配置nginx方向代理,實現URL隱形轉發 (附帶nginx配置檔案詳解) 免費領取滿減阿里雲紅包 專案名稱:【域名解析–隱形URL轉發】–centos 7.3 環境: 阿里雲伺服器之上有多個tomcat; tomcat的網站基於ip+埠開發+專案名名稱。 要求