網站首頁 編程語言 正文
一、環境
開發工具: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
相關推薦
- 2022-05-01 python中NumPy的安裝與基本操作_python
- 2022-04-17 spring cloud config和bus組件實現自動刷新
- 2022-06-21 C語言詳解結構體的內存對齊與大小計算_C 語言
- 2022-07-21 Hadoop-HDFS分布式文件系統基礎
- 2022-07-03 C#中的委托Delegate_C#教程
- 2023-02-10 批處理從html格式(接收到的郵件)中讀取數據的操作方法_DOS/BAT
- 2022-06-14 Go語言學習之條件語句使用詳解_Golang
- 2024-02-16 SpringBoot 攔截器Intercepto的創建與基本使用
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支