• 當前位置:首頁 > IT技術 > 其他 > 正文

    nacos集成dubbo實現遠程服務調用多服務端2
    2022-09-06 22:41:30


    文章目錄

    一、版本選取、需求和項目簡述
    1. 版本選取

    框架

    版本

    說明

    spring-cloud-alibaba

    2.2.6.RELEASE

    版本要對應

    spring-boot

    2.3.2.RELEASE

    版本要對應

    nacos

    1.4.2

    版本要對應

    org.apache.dubbo

    2.7.8

    版本要對應

    2. 項目模塊說明

    模塊

    說明

    EShopParent

    父工程

    DubboApi

    接口子模塊

    Order-serv

    訂單模塊

    Stock-serv

    扣庫存模塊

    product-serv

    產品模塊

    2. 需求說明

    訂單模塊調用扣庫存模塊完成庫庫存的業務

    二、需求實戰-依賴初始化
    2.1. 創建maven父工程EShopParent
    <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.gblfy</groupId>
    <artifactId>EShopParent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
    <module>Order-serv</module>
    <module>Stock-serv</module>
    <module>DubboApi</module>
    <module>product-serv</module>
    </modules>
    <description>父工程 所有子工程需要依賴此工程</description>
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.2.RELEASE</version>
    </parent>

    <dependencies>
    <!--springMVC啟動器-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--nacos服務發現-->
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!--dubbo組件-->
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-dubbo</artifactId>
    </dependency>
    </dependencies>
    <dependencyManagement>
    <dependencies>
    <!--spring-cloud-alibaba依賴版本控制-->
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <scope>import</scope>
    <type>pom</type>
    </dependency>
    </dependencies>
    </dependencyManagement>
    </project>
    2.2. 創建子模塊DubboApi
    <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
    <artifactId>EShopParent</artifactId>
    <groupId>com.gblfy</groupId>
    <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>DubboApi</artifactId>

    </project>
    2.3. 創建服務端Stock-serv
    <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
    <artifactId>EShopParent</artifactId>
    <groupId>com.gblfy</groupId>
    <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>Stock-serv</artifactId>
    <dependencies>
    <dependency>
    <groupId>com.gblfy</groupId>
    <artifactId>DubboApi</artifactId>
    <version>1.0-SNAPSHOT</version>
    </dependency>
    </dependencies>

    </project>
    2.4. 創建服務端product-serv
    <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
    <artifactId>EShopParent</artifactId>
    <groupId>com.gblfy</groupId>
    <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>product-serv</artifactId>

    <dependencies>
    <dependency>
    <groupId>com.gblfy</groupId>
    <artifactId>DubboApi</artifactId>
    <version>1.0-SNAPSHOT</version>
    </dependency>
    </dependencies>
    </project>
    2.5. 創建消費端端Order-serv
    <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
    <artifactId>EShopParent</artifactId>
    <groupId>com.gblfy</groupId>
    <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.gblfy</groupId>
    <artifactId>Order-serv</artifactId>
    <modelVersion>4.0.0</modelVersion>

    <dependencies>
    <dependency>
    <groupId>com.gblfy</groupId>
    <artifactId>DubboApi</artifactId>
    <version>1.0-SNAPSHOT</version>
    </dependency>
    </dependencies>


    </project>
    三、需求實戰-代碼編寫
    3.1. 創建公共接口

    在DubboApi子模塊中創建調用扣庫存模塊(Stock-serv)的接口IStockService

    package com.gblfy.stock.api;

    public interface IStockService {
    public String reduce(Integer productId, Integer userId);
    }

    在DubboApi子模塊中創建調用產品(product-serv)模塊的接口

    package com.gblfy.product.api;

    public interface IProductService {
    public String buyProduct(Integer productId, Integer userId);
    }
    3.2. 扣庫存服務端編寫

    在Stock-serv子模塊中實現接口實現類StockServiceimpl

    package com.gblfy.service.impl;

    import com.gblfy.stock.api.IStockService;
    import org.apache.dubbo.config.annotation.DubboService;

    @DubboService
    public class StockServiceimpl implements IStockService {

    @Override
    public String reduce(Integer productId, Integer userId) {
    return "用戶編號: " + userId + "產品編碼: " + productId + "減庫存1個";
    }
    }

    啟動類上添加@EnableDiscoveryClient注解

    package com.gblfy;

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

    @EnableDiscoveryClient
    @SpringBootApplication
    public class StockApplication {
    public static void main(String[] args) {
    SpringApplication.run(StockApplication.class);
    }
    }
    3.3. 產品服務端編寫

    在product-serv子模塊中實現接口實現類ProductServiceImpl

    package com.gblfy.service.impl;

    import com.gblfy.product.api.IProductService;
    import org.apache.dubbo.config.annotation.DubboService;

    @DubboService
    public class ProductServiceImpl implements IProductService {

    @Override
    public String buyProduct(Integer productId, Integer userId) {
    return "用戶編號: " + userId + "產品編碼: " + productId + "購買PHONE SUCCESS";
    }
    }

    啟動類添加@EnableDiscoveryClient注解

    package com.gblfy;

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

    @SpringBootApplication
    @EnableDiscoveryClient
    public class ProductApplication {

    public static void main(String[] args) {
    SpringApplication.run(ProductApplication.class);
    }
    }
    3.5. 消費端編寫

    在Order-serv子模塊的啟動類上添加@EnableDiscoveryClient開啟服務發現掃描

    package com.gblfy;

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;


    @SpringBootApplication
    @EnableDiscoveryClient
    public class OrderAppliaction {

    public static void main(String[] args) {
    SpringApplication.run(OrderAppliaction.class);
    }
    }

    創建一個客戶端類發起請求OrderController分別向扣庫存模塊和產品模塊發起請求

    package com.gblfy.controller;

    import com.gblfy.product.api.IProductService;
    import com.gblfy.stock.api.IStockService;
    import org.apache.dubbo.config.annotation.DubboReference;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;


    @RestController
    public class OrderController {

    @DubboReference
    private IStockService stockService;
    @DubboReference
    private IProductService productService;

    @GetMapping("/order/create")
    public String createOrder(Integer productId, Integer userId) {
    //調用扣庫存模塊服務
    return stockService.reduce(productId, userId);
    }
    //http://127.0.0.1:8080/order/create?productId=2&userId=8

    @GetMapping("/buyProduct")
    public String buyProduct(Integer productId, Integer userId) {
    //調用產品模塊服務
    return productService.buyProduct(productId, userId);
    }
    // http://127.0.0.1:8080/buyProduct?productId=2&userId=8
    }
    四、需求實戰-配置編寫
    4.1. 扣庫存服務端配置
    # 應用端口
    server:
    port: 8082

    # nacos服務發現配置
    spring:
    cloud:
    nacos:
    server-addr: 127.0.0.1:8848
    discovery:
    service: stock-serv
    application:
    name: stock-serv

    # Dubbo服務配置
    4.2. 產品服務端配置
    server:
    port: 8081
    spring:
    cloud:
    nacos:
    server-addr: 127.0.0.1:8848
    discovery:
    service: product-serv
    application:
    name: product-serv

    # Dubbo服務配置
    4.3.消費端配置
    server:
    port: 8080
    spring:
    application:
    name: order-serv
    cloud:
    nacos:
    discovery:
    server-addr: http://127.0.0.1:8848
    config:
    server-addr: http://127.0.0.1:8848

    # Dubbo服務配置
    五、需求測試實戰
    5.1. 啟動nacos

    nacos集成dubbo實現遠程服務調用多服務端2_dubbo


    nacos集成dubbo實現遠程服務調用多服務端2_dubbo_02

    5.2. 啟動服務端

    分別依次啟動扣庫存服務端和產品服務端

    nacos集成dubbo實現遠程服務調用多服務端2_dubbo_03


    nacos集成dubbo實現遠程服務調用多服務端2_dubbo_04

    5.3. 啟消費端

    nacos集成dubbo實現遠程服務調用多服務端2_dubbo_05

    5.4. 查看nacos

    nacos集成dubbo實現遠程服務調用多服務端2_dubbo_06

    5.5. 項目模塊分布結構

    nacos集成dubbo實現遠程服務調用多服務端2_dubbo_07

    六、測試實戰
    6.1. 請求扣庫存鏈路

    ??http://127.0.0.1:8080/order/create?productId=2&userId=8??

    nacos集成dubbo實現遠程服務調用多服務端2_xml_08


    nacos集成dubbo實現遠程服務調用多服務端2_maven_09


    nacos集成dubbo實現遠程服務調用多服務端2_dubbo_10

    6.2. 請求產品鏈路

    ??http://127.0.0.1:8080/buyProduct?productId=2&userId=8??

    nacos集成dubbo實現遠程服務調用多服務端2_dubbo_11


    nacos集成dubbo實現遠程服務調用多服務端2_xml_12


    nacos集成dubbo實現遠程服務調用多服務端2_xml_13

    6.3. 常見的異常

    沒有服務的提供者,啟動客戶端

    nacos集成dubbo實現遠程服務調用多服務端2_spring_14


    nacos集成dubbo實現遠程服務調用多服務端2_xml_15


    本文摘自 :https://blog.51cto.com/g

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码