springboot 整合dubbo最佳實踐 (使用redis作為註冊中心)
阿新 • • 發佈:2019-01-05
參考原文
一 概述
Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高效能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向介面的遠端方法呼叫,智慧容錯和負載均衡,以及服務自動註冊和發現。
-
面向介面代理的高效能RPC呼叫
提供高效能的基於代理的遠端呼叫能力,服務以介面為粒度,為開發者遮蔽遠端呼叫底層細節。
-
智慧負載均衡
內建多種負載均衡策略,智慧感知下游節點健康狀況,顯著減少呼叫延遲,提高系統吞吐量。
-
服務自動註冊與發現
支援多種註冊中心服務,服務例項上下線實時感知。
-
高度可擴充套件能力
遵循微核心+外掛的設計原則,所有核心能力如Protocol、Transport、Serialization被設計為擴充套件點,平等對待內建實現和第三方實現。
-
執行期流量排程
內建條件、指令碼等路由策略,通過配置不同的路由規則,輕鬆實現灰度釋出,同機房優先等功能。
-
視覺化的服務治理與運維
提供豐富服務治理、運維工具:隨時查詢服務元資料、服務健康狀態及呼叫統計,實時下發路由策略、調整配置引數。
二 整合dubbo
1 建立公共服務介面module : dubboApi
定義公共介面: AnnotateService
package com.hubin.dubbo.api;
public interface AnnotateService {
public String show(String name);
}
2 建立服務提供方專案 dubboProvider
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.hubin.dubbo</groupId> <artifactId>dubboProvider</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>dubboProvider</name> <url>http://maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.2.RELEASE</version> <relativePath /> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <dubbo.version> 2.5.8</dubbo.version> </properties> <!--公共介面 依賴 --> <dependencies> <dependency> <groupId>com.hubin.dubbo</groupId> <artifactId>dubboApi</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!--dubbo 依賴 --> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <!--Springboot 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--Springboot 測試 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--使用redis做註冊中心所需要的依賴 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
新增dubbo 配置類 DubboConfiguration
package com.hubin.dubbo.provider.bean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.RegistryConfig;
@Configuration
public class DubboConfiguration {
@Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("provider-test");
return applicationConfig;
}
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("redis://127.0.0.1:6379");
registryConfig.setClient("curator");
return registryConfig;
}
}
定義服務實現類AnnotateServiceImp:
package com.hubin.dubbo.provider.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.hubin.dubbo.api.AnnotateService;
//Service註解暴露服務
@Service(timeout = 5000,interfaceClass =AnnotateService.class)
public class AnnotateServiceImp implements AnnotateService {
@Override
public String show(String name) {
return "hello "+name+" !!";
}
}
3 建立服務消費方專案 :dubboCustomer
application.properties配置檔案中設定埠號為8081
server.port=8081
新增依賴:
<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.hubin.dubbo</groupId>
<artifactId>dubboCustomer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>dubboCustomer</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<dubbo.version> 2.5.8</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>com.hubin.dubbo</groupId>
<artifactId>dubboApi</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
新增消費方配置:
package com.hubin.dubbo.customer.bean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ConsumerConfig;
import com.alibaba.dubbo.config.RegistryConfig;
@Configuration
public class DubboConfiguration {
@Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("consumer-test");
return applicationConfig;
}
@Bean
public ConsumerConfig consumerConfig() {
ConsumerConfig consumerConfig = new ConsumerConfig();
consumerConfig.setTimeout(3000);
return consumerConfig;
}
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("redis://127.0.0.1:6379");
registryConfig.setClient("curator");
return registryConfig;
}
}
4 新增測試類TestController
測試前需啟動 服務方專案
package com.hubin.dubbo.customer.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.hubin.dubbo.api.AnnotateService;
@RestController
public class TestController {
//通過註解獲取消費物件
@com.alibaba.dubbo.config.annotation.Reference
public AnnotateService annotateService;
@RequestMapping("/test")
public void test() {
System.out.println(annotateService.show("hubin"));
}
}
5 結果