日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

spring cloud alibaba nacos搭建最小可運行微服務

作者:Rewloc 更新時間: 2022-05-11 編程語言

一、環境

開發工具:IntelliJ Idea
JDK 1.8
Spring boot 2.3.12.RELEASE
spring cloud Alibaba 2.2.7.RELEASE
openfeign 2.2.9.RELEASE

二、程序目錄

可以通過開發工具中的maven、spring initializr等進行項目創建。內容包括:父工程、兩個子工程。結構如下圖:
在這里插入圖片描述

①父工程,該工程僅是pom工程,向子工程提供pom的繼承。
②子工程,用于兩個服務之間的調用

  • 工程說明:
  • order服務通過restTemplate和openfeign兩種方式分別調用stock服務中的reduct接口

三、配置文件

  • 3.1 父POM文件

<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.0modelVersion>

    <groupId>com.jwsswgroupId>
    <artifactId>microserviceartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <name>microservicename>
    <description>microservicedescription>
    <packaging>pompackaging>
    
    <modules>
        <module>ordermodule>
        <module>stockmodule>
    modules>
    
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.3.12.RELEASEversion>
        <relativePath/> 
    parent>
    
    <properties>
        <java.version>8java.version>
        <spring.cloud.version>Hoxton.SR12spring.cloud.version>
        <alibaba.cloud.version>2.2.7.RELEASEalibaba.cloud.version>
    properties>
    
    <dependencyManagement>
        <dependencies>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>${spring.cloud.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-alibaba-dependenciesartifactId>
                <version>${alibaba.cloud.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>

    
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>

    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombokgroupId>
                            <artifactId>lombokartifactId>
                        exclude>
                    excludes>
                configuration>
            plugin>
        plugins>
    build>

project>
  • 3.2 子工程POM,除artifactId外兩個子工程配置一致

<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>microserviceartifactId>
        <groupId>com.jwsswgroupId>
        <version>0.0.1-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>orderartifactId>

    
    <properties>
        <maven.compiler.source>8maven.compiler.source>
        <maven.compiler.target>8maven.compiler.target>
    properties>

    
    <dependencies>
    dependencies>
project>
  • 3.3 application.yml配置文件,除application.name外兩個子工程配置一致
server:
  port: 8011

# spring 相關配置
spring:
  application:
    name: order-server # 服務名稱
  cloud:
    # nacos客戶端配置
    nacos:
      discovery:
        server-addr: 192.168.0.182:8848 # nacos服務地址

# feign配置
feign:
  # 是否開啟服務降級,默認不開啟,true表示開啟
  hystrix:
    enabled: true

四、程序代碼

4.1 Order子工程的相關代碼
  • 4.1.1 啟動類OrderApplication
package com.jwssw.order;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * 類描述:啟動類
 *
 * @author 魯浩鵬 Lu Haopeng
 * @version 1.0
 * @email Lu Haopeng
 * @date 2022/3/19 10:42
 * @since JDK 8
 */
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {
    /**
     * 方法描述: 啟動類入口
     *
     * @param args 參數
     * @author 魯浩鵬 Lu Haopeng
     * @date 2022/3/25 13:50
     */
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }


    /**
     * 方法描述: 裝載restTemplate bean對象
     *
     * @param builder 配置類
     * @return {@link RestTemplate}
     * @author 魯浩鵬 Lu Haopeng
     * @date 2022/3/25 13:51
     */
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }
}
  • 4.1.2 控制類OrderController
package com.jwssw.order;

import com.jwssw.order.service.OrderService;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * 類描述:對外提供服務類
 *
 * @author 魯浩鵬 Lu Haopeng
 * @version 1.0
 * @email Lu Haopeng
 * @date 2022/3/19 10:43
 * @since JDK 8
 */
@RestController
@RequestMapping("/order")
public class OrderController {
    /** restTemplate遠程調用對象 */
    private final RestTemplate restTemplate;
    /** openfeign遠程調用對象 */
    private final OrderService orderService;

    /**
     * 構造方法注入
     */
    public OrderController(RestTemplate restTemplate,
                           @Qualifier("com.jwssw.order.service.OrderService") OrderService orderService) {
        this.restTemplate = restTemplate;
        this.orderService = orderService;
    }

    /**
     * 方法描述: 采用restTemplate方式遠程調用
     *
     * @author 魯浩鵬 Lu Haopeng
     * @date 2022/3/25 14:11
     */
    @RequestMapping("/add")
    public String add() {
        // 遠程調用
        String str = restTemplate.getForObject("http://stock-server/stock/reduct", String.class);
        // 返回結果
        return "Hello World " + str;
    }


    /**
     * 方法描述: 采用openfeign方式遠程調用
     *
     * @return {@link String}
     * @author 魯浩鵬 Lu Haopeng
     * @date 2022/3/25 14:12
     */
    @RequestMapping("/feignAdd")
    public String feignAdd() {
        // openfeign調用遠程接口
        String str = orderService.reduct();
        // 返回結果
        return "feign調用:" + str;
    }
}
  • 4.1.3 openfeign接口類OrderService
package com.jwssw.order.service;

import com.jwssw.order.service.impl.OrderServiceImpl;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * 類描述:openfeign遠程調用接口類
 *
 * @author 魯浩鵬 Lu Haopeng
 * @version 1.0
 * @email Lu Haopeng
 * @date 2022/3/24 09:53
 * @since JDK 8
 */
@FeignClient(name = "stock-server", fallback = OrderServiceImpl.class)
public interface OrderService {
    /**
     * 方法描述: 調用stock服務的reduct接口的方法
     *
     * @return {@link String}
     * @author 魯浩鵬 Lu Haopeng
     * @date 2022/3/25 14:23
     */
    @GetMapping("/stock/reduct")
    String reduct();
}
  • 4.1.4 回調類OrderServiceImpl
package com.jwssw.order.service.impl;

import com.jwssw.order.service.OrderService;
import org.springframework.stereotype.Component;

/**
 * 類描述:openfeign遠程調用失敗的回調類
 *
 * @author 魯浩鵬 Lu Haopeng
 * @version 1.0
 * @email Lu Haopeng
 * @date 2022/3/24 09:54
 * @since JDK 8
 */
@Component
public class OrderServiceImpl implements OrderService {
    /**
     * 方法描述: 調用失敗后的回調方法
     *
     * @return {@link String}
     * @author 魯浩鵬 Lu Haopeng
     * @date 2022/3/25 14:23
     */
    @Override
    public String reduct() {
        return "庫存服務不可達";
    }
}
4.2 stock子工程的相關代碼
  • 4.2.1 啟動類StockApplication
package com.jwssw.stock;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 類描述:stock項目啟動類
 *
 * @author 魯浩鵬 Lu Haopeng
 * @version 1.0
 * @email Lu Haopeng
 * @date 2022/3/19 10:52
 * @since JDK 8
 */
@SpringBootApplication
public class StockApplication {
    /**
     * 方法描述: stock服務啟動入口
     *
     * @param args 參數
     * @author 魯浩鵬 Lu Haopeng
     * @date 2022/3/25 14:27
     */
    public static void main(String[] args) {
        SpringApplication.run(StockApplication.class, args);
    }
}
  • 4.2.2 對外提供服務類StockController
package com.jwssw.stock;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 類描述:對外提供服務類
 *
 * @author 魯浩鵬 Lu Haopeng
 * @version 1.0
 * @email Lu Haopeng
 * @date 2022/3/19 10:46
 * @since JDK 8
 */
@RestController
@RequestMapping("/stock")
public class StockController {
    
    /** 獲取配置文件中的端口號 */
    @Value("${server.port}")
    private String port;

    /**
     * 方法描述: 對外提供的方法
     *
     * @return {@link String}
     * @author 魯浩鵬 Lu Haopeng
     * @date 2022/3/25 14:29
     */
    @RequestMapping("/reduct")
    public String reduct() {
        System.out.println("扣減庫存成功");
        return "扣減庫存" + port;
    }
}

五、總結

以上內容主要給予spring cloud alibaba的最小可運行的微服務Demo工程,如果你在實際項目中尚未微服務,不妨可以采用本文上述方式在實際項目中推行一下。

原文鏈接:https://blog.csdn.net/lhp3000/article/details/123735389

欄目分類
最近更新