1. 程式人生 > 其它 >Spring Cloud Alibaba-在nacos環境下整合dubbo

Spring Cloud Alibaba-在nacos環境下整合dubbo

技術標籤:SpringCloudSpringCloudalibaba微服務dubbonacos

echo編輯整理,歡迎轉載,轉載請宣告文章來源。歡迎新增echo微信(微訊號:t2421499075) 交流學習。


我們之前整合了fegin來呼叫相對應的服務,本章我們來整合dubbo。那有了fegin為什麼還要dubbo?這是本章的核心,本章不僅會講怎麼整合使用dubbo,同時也會講dubbo和fegin的區別

fegin和dubbo怎麼選

首先,不談技術的區別和具體作用,fegin和dubbo最大的區別就是:dubbo是alibaba的親兒子

為什麼要整合dubbo

dubbo按理來說,自己就是一個很好的微服務治理框架。既然SpringCloudAlibaba也是一套微服務治理方案,那這個時候使用dubbo是不是顯得有很多的重複?其實不然。在Spring Cloud Alibaba的整合之下,Dubbo使用者既可以享受到原本RPC帶來效能優勢,又可以更好的享受Spring Cloud的各種福利;而對於Spring Cloud使用者來說,在服務治理層面,又對了一個不錯的可選項。可以說這塊的整合是真正的讓這兩大使用者群體得到了很好的融合,起到了互相成就的作用。

整合dubbo,入門案例

利用Dubbo來實現服務提供方與服務消費方,這裡我們就需要建立對應的兩個專案,一個是服務提供者,一個是服務消費者。我們先來建立一個服務提供者。

  • 建立一個簡單的SpringBoot服務,這裡SpringBoot的版本我選擇的:2.2.11.RELEASE

引入整合dubbo需要的依賴

  • 1、spring-cloud-starter-dubbo
  • 2、spring-cloud-starter-alibaba-nacos-discovery
    我的server專案pom檔案如下
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <
groupId
>
org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.11.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.echo</groupId> <artifactId>dubbo-server</artifactId> <version>0.0.1-SNAPSHOT</version> <name>dubbo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version> </properties> <dependencies> <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> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> <version>2.2.1.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

編寫對應的配置

  • nacos的配置
  • dubbo自己的配置
server:
  port: 10083

spring:
  cloud:
    nacos:
      server-addr: 192.168.22.71:8848
  application:
    name: spring-cloud-dubbo-server

dubbo:
  scan:
    base-packages: com.echo.dubbo.server
  protocol:
    name: dubbo
    port: -1
  registry:
    address: spring-cloud://localhost
  • dubbo.scan.base-packages: 指定,提供服務的介面的包
  • dubbo.protocol.name: Dubbo 為協議名稱
  • dubbo.protocol.port: -1 表示自增埠,從 20880 開始
  • dubbo.registry.address: 說明掛載到 Spring Cloud 註冊中心(也就是我們的nacos,可以直接使用nacos地址替換localhost)

新增nacos的服務註冊與發現註解

// 在啟動類上添加註解,提供者和消費者都需要
@EnableDiscoveryClient

編寫一個dubbo介面並實現

public interface TestService {
    String test(String name);
}

// 注意該serveice為dubbo的註解,不是framework的,引入應該為import org.apache.dubbo.config.annotation.Service;
@Service
public class TestServiceImpl implements TestService {
    @Override
    public String test(String name) {
        return "hello " + name;
    }
}

到這裡我們的服務提供者就已經完成了,然後建立一個服務消費者來呼叫就好

建立一個消費者

消費者的建立和服務提供者,一樣。依賴上只是要去將服務提供者這個專案新增進去,其他的都一樣。關鍵是配置檔案

  • application.yml配置檔案裡面,只是和服務提供者有一個地方不同,那就是去掉scan這一項dubbo.scan.base-packages。新增一個dubbo.cloud.subscribed-services: spring-cloud-dubbo-server(這個值就是我們服務提供者的專案註冊在nacos的名稱)

編寫一個測試類

import org.apache.dubbo.config.annotation.Reference;
@RestController
public class TestController {
    @Reference
    private TestService testService;
    @GetMapping("/test")
    public String test() {
        return testService.test("echo");
    }
}

到這裡為止,就已經完成了我們的大部分工作了,我們可以啟動nacos來驗證一下服務是否都能夠直接註冊上來。
在這裡插入圖片描述

成功之後我們就可以呼叫我們的測試介面了:
在這裡插入圖片描述

到這裡我們就已經完成了整合dubbo