一 概述
Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、輕量級的開源Java RPC架構,它提供了三大核心能力:面向接口的遠端方法調用,智能容錯和負載均衡,以及服務自動注冊和發現。
-
面向接口代理的高性能RPC調用
提供高性能的基于代理的遠端調用能力,服務以接口為粒度,為開發者屏蔽遠端調用底層細節。 -
智能負載均衡
内置多種負載均衡政策,智能感覺下遊節點健康狀況,顯著減少調用延遲,提高系統吞吐量。 -
服務自動注冊與發現
支援多種注冊中心服務,服務執行個體上下線實時感覺。 -
高度可擴充能力
遵循微核心+插件的設計原則,所有核心能力如Protocol、Transport、Serialization被設計為擴充點,平等對待内置實作和第三方實作。 -
運作期流量排程
内置條件、腳本等路由政策,通過配置不同的路由規則,輕松實作灰階釋出,同機房優先等功能。 -
可視化的服務治理與運維
提供豐富服務治理、運維工具:随時查詢服務中繼資料、服務健康狀态及調用統計,實時下發路由政策、調整配置參數。
二 整合dubbo
1 建立公共服務接口module : wj-dubbo-api
定義公共接口: SpringService
package example.service;
/**
* @author: wangjun
* @create: 2018/8/7
**/
public interface SpringService {
/**
* dubbo調用測試
* @return
*/
String dubboExample();
}
2 建立服務提供方項目 wj-dubbo-server
添加依賴:
<dependencies>
<!--dubbo 公共接口依賴-->
<dependency>
<groupId>com.wj.project</groupId>
<artifactId>wj-dubbo-api</artifactId>
<version>1.0-SNAPSHOT</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>
<!--dubbo 依賴-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.1.0</version>
<!--<version>0.2.0</version>-->
</dependency>
<!--使用redis做注冊中心-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
添加dubbo 配置類
package com.wj.project.server.common.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.spring.context.annotation.DubboComponentScan;
/**
* @author: wangjun
* @create: 2018/8/7
**/
@Configuration
@DubboComponentScan("com.wj.project.server.example") // 掃描 Dubbo 元件
public class ProviderConfiguration {
/**
* 目前應用配置
*/
@Bean("dubbo-annotation-provider")
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("wj-dubbo-server");
return applicationConfig;
}
/**
* 目前連接配接注冊中心配置
*/
@Bean("my-registry")
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
// registryConfig.setAddress("zookeeper://localhost:2181");
registryConfig.setAddress("redis://localhost:6379");
return registryConfig;
}
/**
* 目前連接配接注冊中心配置
*/
@Bean("dubbo")
public ProtocolConfig protocolConfig() {
ProtocolConfig protocolConfig = new ProtocolConfig();
protocolConfig.setName("dubbo");
protocolConfig.setPort(12345);
return protocolConfig;
}
}
定義服務實作類:
package com.wj.project.server.example.service;
import com.alibaba.dubbo.config.annotation.Service;
import example.service.SpringService;
/**
* @author: wangjun
* @create: 2018/8/7
**/
@Service
public class SpringServiceImpl implements SpringService {
@Override
public String dubboExample() {
return "hello world ,hello dubbo";
}
}
3 建立服務消費方項目 :wj-dubbo-consumer、
添加依賴:
<dependencies>
<!--dubbo 公共接口依賴-->
<dependency>
<groupId>com.wj.project</groupId>
<artifactId>wj-dubbo-api</artifactId>
<version>1.0-SNAPSHOT</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>
<!--dubbo 依賴-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.1.0</version>
</dependency>
<!--使用redis做注冊中心-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
添加消費方配置:
package com.wj.project.consumer.common.dubbo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.spring.context.annotation.DubboComponentScan;
import com.wj.project.consumer.example.service.SpringConsumerService;
/**
* @author: wangjun
* @create: 2018/8/7
**/
@Configuration
@DubboComponentScan //預設掃描目前包及子包
public class ConsumerConfiguration {
/**
* 目前應用配置
*/
@Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("wj-dubbo-consumer");
return applicationConfig;
}
/**
* 目前連接配接注冊中心配置
*/
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("redis://localhost:6379");
return registryConfig;
}
/**
* 僅供測試時使用,非測試時可注釋
* <p>
* 注冊 AnnotationDemoServiceConsumer,@DubboComponentScan 将處理其中 @Reference 字段。
* 如果 AnnotationDemoServiceConsumer 非 Spring Bean 的話,
* 即使 @DubboComponentScan 指定 package 也不會進行處理,與 Spring @Autowired 同理
*/
@Bean
public SpringConsumerService SpringConsumerService() {
return new SpringConsumerService();
}
}
添加消費service:
@Service
public class SpringConsumerService {
@Reference(url = "dubbo://10.9.26.208:12345")
private SpringService springService;
public String dubboExample() {
return springService.dubboExample();
}
}
4 添加測試類
測試前需啟動 服務方項目
package com.wj.project.consumer.example.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.wj.project.consumer.common.dubbo.ConsumerConfiguration;
import com.wj.project.consumer.example.service.SpringConsumerService;
/**
* @author: wangjun
* @create: 2018/8/7
**/
public class ConsumerBootstrap {
public static void main(String[] args) {
// 啟動并且傳回服務消費方上下文
ApplicationContext consumerContext = startConsumerContext();
// 擷取 AnnotationDemoServiceConsumer Bean
SpringConsumerService consumer = consumerContext.getBean(SpringConsumerService.class);
// 執行 doSayHello 方法
String message = consumer.dubboExample();
// 輸出執行結果
System.out.println(message);
}
/**
* 啟動并且傳回服務消費方上下文
*
* @return AnnotationConfigApplicationContext
*/
private static ApplicationContext startConsumerContext() {
// 建立服務消費方 Annotation 配置上下文
AnnotationConfigApplicationContext consumerContext = new AnnotationConfigApplicationContext();
// 注冊服務消費方配置 Bean
consumerContext.register(ConsumerConfiguration.class);
// 啟動服務消費方上下文
consumerContext.refresh();
// 傳回服務消費方 Annotation 配置上下文
return consumerContext;
}
}
5 結果

版權聲明:本文為CSDN部落客「weixin_34357962」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。
原文連結:https://blog.csdn.net/weixin_34357962/article/details/92599840