Spring Cloud Alibaba 完整使用及与各中间件集成

news/2024/11/9 10:17:26/

目录

前言

官方中文文档

使用版本

spring

中间件

使用到的组件与功能

环境安装

虚拟机

nexus

nacos

集成过程

工程搭建

父工程搭建

子工程

服务集成

nacos

配置文件:

服务注册与发现-discovery

服务注册

启动

服务发现

测试

配置管理-config

新增配置

 测试


前言

只介绍如何集成及使用,概念性的东西就不细说了。慢慢更新

官方中文文档

spring-cloud-alibaba/README-zh.md at 2022.x · alibaba/spring-cloud-alibaba · GitHub

使用版本

spring

我这边使用的都是最新版 

spring.cloud.alibaba.version2022.0.0.0-RC2
spring.cloud.version2022.0.0
spring.boot.version3.0.2

spring-cloud-alibaba、spring-cloud、springboot 三者的版本关系说明

https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

中间件

nacos: 2.2.1

使用到的组件与功能

服务注册与发现:Nacos 

分布式事务:Seata

网关:Spring Cloud Gateway

服务调用:OpenFeign

环境安装

虚拟机

我是用的VMware虚拟机里面跑的。

具体怎么装,看下面

(312条消息) VMware16安装 CentOS7_ricardo.M.Yu的博客-CSDN博客

nexus

我这边搭建了一个nexus maven私服

(310条消息) docker-compose 搭建maven私服 nexus与配置_ricardo.M.Yu的博客-CSDN博客

nacos

(310条消息) docker-compose安装nacos 2.2.1及配置_ricardo.M.Yu的博客-CSDN博客

集成过程

工程搭建

我这边使用的是springboot多模块项目,最终效果如下

父工程搭建

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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>cloud-alibaba</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>common</module><module>file</module><module>auth</module><module>gateway</module><module>admin</module><module>data</module><module>biz</module><module>log</module><module>consumer</module></modules><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.cloud.alibaba.version>2022.0.0.0-RC2</spring.cloud.alibaba.version><spring.cloud.version>2022.0.0</spring.cloud.version><spring.boot.version>3.0.2</spring.boot.version><spring.boot.admin.version>2.5.1</spring.boot.admin.version><lombok.version>1.18.20</lombok.version><fastjson.version>1.2.73</fastjson.version></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.2</version><relativePath/></parent><dependencyManagement><!-- cloud  --><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring.boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring.cloud.version}</version><type>pom</type><scope>import</scope></dependency><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><!-- admin --><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>${spring.boot.admin.version}</version></dependency><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId><version>${spring.boot.admin.version}</version></dependency><!-- 第三方工具 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency></dependencies></dependencyManagement><!--统一环境--><profiles><profile><id>prod</id><properties><profiles.active>prod</profiles.active></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>dev</id><properties><profiles.active>dev</profiles.active></properties></profile></profiles><!--maven插件--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>none</mainClass>     <!-- 取消查找本项目下的Main方法:为了解决Unable to find main class的问题 --><classifier>execute</classifier>    <!-- 为了解决依赖模块找不到此模块中的类或属性 --></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

子工程

服务集成

nacos集成

部分可以参考官方的示例

Nacos Spring Cloud 快速开始

配置文件

这边我定义了4组配置文件,说一下他们的作用:

引导类配置; 

bootstrap.yaml:定义当前生效的配置

spring:profiles:active: dev

bootstrap-dev.yaml:定义引导类当前生效的参数

spring:cloud:nacos:server-addr: http://192.168.1.115:8108/discovery:group: dev

应用级配置:

application.yaml

应用级别的基础配置

logging:level:root: infocom:sy: debug

application-dev.yaml

定义应用的名称以及端口等信息

server:port: 9110
spring:application:name: biz

服务注册与发现-discovery

服务注册

引入依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

启动

启动后,查看nacos控制台服务列表,已经能看到这个实例

服务发现

需要在新建一个consumer服务,来测试

分别在两个模块建两个controller, biz模块下:

@RestController
@RefreshScope
@RequestMapping("/")
public class BizController {@GetMapping(value = "/echo/{string}")public String echo(@PathVariable String string) {return "Hello Nacos Discovery " + string;}
}

consumer模块下


@Slf4j
@RestController
@RequestMapping("/")
public class ConsumerController {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate LoadBalancerClient loadBalancerClient;@Value("${spring.application.name}")private String appName;@GetMapping("/echo/app-name")public String echoAppName() {//使用 LoadBalanceClient 和 RestTemolate 结合的方式来访问ServiceInstance serviceInstance = loadBalancerClient.choose("biz");String url = String.format("http://%s:%s/echo/%s", serviceInstance.getHost(), serviceInstance.getPort(), appName);System.out.println("request url:" + url);String result = restTemplate.getForObject(url, String.class);log.info("result -> {}", result);return result;}
}

测试

用consumer下的http测试接口,发现已经能正常返回数据,appName即为consumer

配置管理-config

配置管理测试,主要集成从nacos拉取公共配置并测试,

新增配置

biz模块下新增依赖和配置文件

 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

增加配置中心config配置,文件扩展为yaml

spring:cloud:nacos:server-addr: http://192.168.1.115:8108/discovery:group: dev#配置中心config:server-addr: http://192.168.1.115:8108/group: devfile-extension: yaml# 共享配置
#        shared-configs:
#          - data-id: application-dev.yaml
#            group: dev
#        extension-configs:
#          - dataId: test01.yml
#            group: devapplication:name: biz

nacos  web页面配置列表新增一个配置,命名格式和group要对,dataId格式

${spring.application.name}-${profile}.${file-extension:properties}

示例:  biz-dev.yaml

 我这边建了个示例

 测试

修改 BizController 增加方法:

@Value("${username}")private String username;@GetMapping("/get")public String get() {return username;}

http测试:可以看到username的值已经为 nacos的设置值


http://www.ppmy.cn/news/87469.html

相关文章

【Python】Python读取CSV文件

CSV文件是一种常见的数据存储格式&#xff0c;很多人在日常工作中需要使用Python处理CSV文件。Python提供了多种方法来读取CSV文件&#xff0c;包括使用标准库、第三方库和内置函数。本文将介绍多种Python读取CSV文件的方法。 使用Python内置csv库读取CSV文件 Python标准库中…

【总结876

学习目标&#xff1a; 月目标&#xff1a;5月&#xff08;1800基础部&#xff0c;背诵15篇短文&#xff0c;熟词僻义300词基础词&#xff09; 周目标&#xff1a;1800高数基础部分&#xff0c;英语背3篇文章并回诵 每日必复习&#xff08;5分钟&#xff09; 只看了相似对角化…

AI技术:智慧交通时代的道路识别(文末送书四本)

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 自动驾驶是当前最热门的技术之一&#xff0c;而道路识别则是自动驾驶系统中的重要一环。它需要自动驾驶车辆能够识别和解读道路标志、路面标线、交通信号灯等道路条件&#xff0c;及时准确地做出驾驶决策。接下来Dream将带…

利用prusa 3d打印地形模型 如何合理切片并提高打印速度

如上图&#xff0c;我们选择打印一个宽10cm 的地形模型&#xff0c;通过prusa切片&#xff0c;显示时间为22小时31分钟。这个速度大概一天&#xff0c;确实不是我们要的速度&#xff0c;如何提高速度又不失去打印细节且不增加失败风险呢。 1.减少填充 10%的填充对于创想三维en…

洛谷 P1049 装箱问题- 01背包-动态规划

题目描述 有一个箱子容量为 V V V&#xff0c;同时有 n n n 个物品&#xff0c;每个物品有一个体积。 现在从 n n n 个物品中&#xff0c;任取若干个装入箱内&#xff08;也可以不取&#xff09;&#xff0c;使箱子的剩余空间最小。输出这个最小值。 输入格式 第一行共一…

货拉拉Java开发实习

目录 1.Java的重载和重写有什么区别2.什么情况下需要用到重载3.有很多个字符串和变量&#xff0c;需要把它们加起来&#xff0c;这时候用String会有什么问题4.有没有其它的替代方案5.StringBuffer和StringBuilder有什么区别6.一个自定义对象&#xff0c;分别创建了两个实例&…

安全中级2:nginx的中间件漏洞

目录 一、nginx解析php的流程 1.原理 2.CGI、FastCGI、PHP-FPM、PHP-CG、WrapperI的定义 二、Fastcgi协议 1.Fastecgi Record 2.Fastcgi Type 3.PHP-FPM(FastCGI进程管理器) 4.总结FastCGI解析的流程 三、nginx配置错误导致的漏洞 1.CRLF注入漏洞&#xff08;$uri解…

二叉树的相关知识

1.树概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#…