官方地址:https://spring.io/projects/spring-cloud-alibaba
github:https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/README-zh.md
* Spring Cloud alibaba为分布式应用开发提供一站式解决方案。它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用Spring Cloud开发应用程序。
* 有了Spring Cloud Alibaba,您只需要添加一些注释和少量配置,就可以将Spring Cloud的应用程序连接到阿里巴巴的分布式解决方案上,并利用阿里巴巴的中间件构建分布式应用系统。
主要功能
* 服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
* 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
* 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
* 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
* 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
* 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
* 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
* 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
区分




输入名称:springCloudAlibaba
选择路径: E:\Java

操作:选中空项目springCloudAlibaba->点击右键,选择 new-> module
名称:springcloudalibaba_parent

<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.2.5.RELEASEversion>
parent>
<properties>
<spring.cloud.version>Hoxton.SR6spring.cloud.version>
<spring.cloud.alibaba.version>2.2.1.RELEASEspring.cloud.alibaba.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>${spring.cloud.alibaba.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
一个更易于构建云原生应用的动态服务发现、配置管理和 服务管理平台。
- 替代Eureka做服务注册中心
- 替代Config做服务配置中心
网址管理
github仓库地址:https://github.com/alibaba/nacos
nacos版本下载地址:https://github.com/alibaba/nacos/releases
文档:https://nacos.io/zh-cn/
手册:https://nacos.io/zh-cn/docs/what-is-nacos.html
安装nacos 博客教程:码农快乐盒的SpringCloudAlibaba-Nacos 2.2.1最新版教程
docker安装,待完善
安装nacos 博客教程:码农快乐盒的SpringCloudAlibaba-Nacos 2.2.1最新版教程



路径:
http://localhost:8848/nacos/
用户名 :nacos 密码:nacos

win单机 启动:
startup.cmd -m standalone
win集群 启动: 双击nacos\bin\startup.cmd
liunx 单机启动:sh startup.sh -m standalone
liunx 集群启动:sh startup.sh
操作:右键springcloudalibaba_parent->new->module
名称:springbootalibaba_01nacosclient

pom.xml依赖
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
dependencies>
application.yml 配置
server:
port: 8989
spring:
application:
name: NACOSCLIENT # 微服务服务名,唯一 推荐大写
cloud:
nacos:
server-addr: 127.0.0.1:8848 #nacos server 总地址
discovery: # 发现
server-addr: ${spring.cloud.nacos.server-addr} # 指定nacos client注册地址。默认是server地址,可写可不写
service: ${spring.application.name} # 指定nacos服务名。 默认是spring.application.name 地址可写可不写,如果写,以这个为主,建议不写
启动文件
路径:springbootalibaba_01nacosclient\src\main\java\com\xxx\NacosClientApplication.java
package com.xxx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient //开始服务注册 这个注解可以省略不写
public class NacosClientApplication {
public static void main(String[] args) {
SpringApplication.run(NacosClientApplication.class, args);
}
}
指定nacos client注册地址:默认 ${spring.cloud.nacos.server-addr} 可不写
指定nacos服务名:默认 ${spring.application.name}可不写
server:
port: 8989
spring:
application:
name: NACOSCLIENT # 微服务服务名,唯一 推荐大写
cloud:
nacos:
server-addr: 127.0.0.1:8848 #nacos server 总地址
discovery: # 发现
server-addr: ${spring.cloud.nacos.server-addr} # 指定nacos client注册地址。默认是server地址,可写可不写
service: ${spring.application.name} # 指定nacos服务名。 默认是spring.application.name 地址可写可不写,如果写,以这个为主,建议不写
名称:springcloudalibaba_02users

pom.xml 引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
dependencies>
配置文件
server:
port: 8989
spring:
application:
name: USERS
cloud:
nacos:
server-addr: 127.0.0.1:8848
启动文件
package com.xxx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class UsersApplication {
public static void main(String[] args) {
SpringApplication.run(UsersApplication.class, args);
}
}
启动后查看nacos

创建UserController
package com.xxx.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
private static final Logger log = LoggerFactory.getLogger(UserController.class);
@GetMapping("/invoke")
public String invokeProduct() {
log.info("用户服务。。。。");
return "调用用户服务成功!!!";
}
}
访问:http://127.0.0.1:8989/invoke

名称:springcloudalibaba_03products

pom.xml 引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
dependencies>
server:
port: 9090
spring:
application:
name: PRODUCTS
cloud:
nacos:
server-addr: 127.0.0.1:8848
启动文件
package com.xxx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ProductApplication {
public static void main(String[] args) {
SpringApplication.run(ProductApplication.class, args);
}
}
启动后查看nacos

创建ProductController
package com.xxx.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProductController {
private static final Logger log = LoggerFactory.getLogger(ProductController.class);
@Value("${server.port}")
private int port;
@GetMapping("/product")
public String product(Integer id) {
log.info("id:{}", id);
return "商品服务返回:" + id + " ,当前提供服务的端口号为:" + port;
}
}
访问:http://127.0.0.1:9090/product?id=21

user module 里面的pom引入openfign
<dependencies>
<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>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
dependencies>
user module UsersApplication 启动类添加开启注解
package com.xxx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableFeignClients
public class UsersApplication {
public static void main(String[] args) {
SpringApplication.run(UsersApplication.class, args);
}
}
user module 添加FeignClient配置类
package com.xxx.feignClients;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient("PRODUCTS")
public interface ProductClient {
@GetMapping("/product")
String product(@RequestParam("id") Integer id);
}
user module UserController 调用FeignClient配置类
package com.xxx.controller;
import com.xxx.feignClients.ProductClient;
import oracle.jrockit.jfr.openmbean.ProducerDescriptorType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
private static final Logger log = LoggerFactory.getLogger(UserController.class);
@Autowired
private ProductClient productClient;
@GetMapping("/invoke")
public String invokeProduct() {
log.info("用户服务。。。。");
//调用商品服务
String result = productClient.product(1);
return result;
}
}
访问:http://127.0.0.1:8989/invoke

名称:springcloudalibaba_04configclient

pom 引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
dependencies>
创建配置文件:src/main/resources/application.yml
server:
port: 8888
spring:
application:
name: CONFIGCLIENT
cloud:
nacos:
server-addr: 127.0.0.1:8848 # client 地址
创建启动文件:src/main/java/com/xxx/ConfigClientApplication.java
package com.xxx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
}
创建controller :src/main/java/com/xxx/controller/DemoController.java
package com.xxx.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
private static final Logger log = LoggerFactory.getLogger(DemoController.class);
@GetMapping("/demo")
public String demo() {
log.info("demo ok !!!");
return "demo ok !!!";
}
}
访问:http://localhost:8888/demo 成功

配置文件配置userName:src/main/resources/application.yml
server:
port: 8888
spring:
application:
name: CONFIGCLIENT
cloud:
nacos:
server-addr: 127.0.0.1:8848 # client 地址
userName: xiaochen
DemoController 注入userName:src/main/java/com/xxx/controller/DemoController.java
package com.xxx.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
private static final Logger log = LoggerFactory.getLogger(DemoController.class);
@Value("${userName}")
private String userName;
@GetMapping("/demo")
public String demo() {
log.info("demo ok !!!");
return "demo ok !!! userName:" + userName;
}
}
访问:http://localhost:8888/demo
发现当前取得是自己计算的登录的名称。不会取配置文件里面的值

修改配置文件配置userName:src/main/resources/application.yml
给userName加前缀
server:
port: 8888
spring:
application:
name: CONFIGCLIENT
cloud:
nacos:
server-addr: 127.0.0.1:8848 # client 地址
customer:
userName: xiaochen
修改DemoController 注入userName:src/main/java/com/xxx/controller/DemoController.java
package com.xxx.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
private static final Logger log = LoggerFactory.getLogger(DemoController.class);
@Value("${customer.userName}")
private String userName;
@GetMapping("/demo")
public String demo() {
log.info("demo ok !!!");
return "demo ok !!! userName:" + userName;
}
}
访问:http://localhost:8888/demo

访问:http://localhost:8848/
操作:配置管理->配置列表->+

配置信息,点击右下角发布

成功后自动跳转到配置列表

springcloudalibaba_04configclient\pom.xml
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
application:直接拉取配置<拉取了文件,直接使用,检测到有文件就使用>
bootstrap:预先拉取<先拉取完成后,在使用,完全拉去完成后在使用>

3. 删除application.yml ,添加bootstrap.yml文件
删除application.yml ,创建:springcloudalibaba_04configclient\src\main\resources\bootstrap.yml
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 # config server地址
group: DEFAULT_GROUP # 哪个组进行配置获取
name: configclient-prod # 文件名称
file-extension: yml #文件扩展名

src/main/java/com/xxx/controller/DemoController.java@RefreshScope //允许配置修改自动刷新
- 不配置注解:页面修改后需要重启后才能更新。
- 配置注解:页面修改后自动刷新。
package com.xxx.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope //允许短短配置修改自动刷新
public class DemoController {
private static final Logger log = LoggerFactory.getLogger(DemoController.class);
@Value("${customer.userName}")
private String userName;
@GetMapping("/demo")
public String demo() {
log.info("demo ok !!!");
return "demo ok !!! userName:" + userName;
}
}
说明


命名空间创建
用于项目拆分。每个项目的配置文件相互隔离
路径:http://localhost:8848/nacos/#/namespace?serverId=center&group=&dataId=&namespace=undefined&namespaceShowName=undefined

路径:http://localhost:8848/nacos/#/namespace?serverId=center&group=&dataId=&namespace=undefined&namespaceShowName=undefined

路径:http://localhost:8848/nacos/#/configurationManagement?serverId=center&group=&dataId=&namespace=undefined&namespaceShowName=undefined&appName=&pageSize=&pageNo=

3. 组的使用
用来区分项目之间的服务
配置列表->点击命名空间ems->+

名称:configclient-dev.yml
分组:CONFIGCLIENT

配置文件:springcloudalibaba_04configclient\src\main\resources\bootstrap.yml
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 # config server地址
group: CONFIGCLIENT # 哪个组进行配置获取
name: configclient-dev # 文件名称
file-extension: yml #文件扩展名
namespace: 48c471f1-6409-4048-b203-4cd4a257243c # 文件命名空间
配置文件说明
命名空间必须是命名空间ID
默认的public可以不配做命名空间

访问:http://localhost:8888/demo

选中要导出的配置,一键导出

删除当前配置

访问:http://localhost:8888/demo 报错

导入配置

导入成功页面

访问:http://localhost:8888/demo

新建数据库

找到本地安装的nacos->conf->nacos-mysql.sql,本地myql表运行当前nacos-mysql.sqll文件

生成如下数据库表

编辑application.properties 文件

配置如下信息

重新启动nacos :startup.cmd -m standalone

访问:http://127.0.0.1:8848/nacos/#,添加配置信息

修改配置文件:springcloudalibaba_04configclient\src\main\resources\bootstrap.yml
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 # config server地址
group: DEFAULT_GROUP # 哪个组进行配置获取
name: configclient-dev # 文件名称
file-extension: yml #文件扩展名
# namespace: 48c471f1-6409-4048-b203-4cd4a257243c # 文件命名空间
访问demo:http://localhost:8888/demo

查看数据库,数据已经插入

引用博客windows10下在docker容器里部署nacos

为了数据彻底情况,把表全部删除, 重新导入

运行nacos\conf\nacos-mysql.sql

运行成功

原始数据


修改nacos、nacos01、nacos02 ->conf->cluster.conf.example 为cluster.conf

修改完成

编辑文件nacos、nacos01、nacos02 ->conf->cluster.conf 为如下内容
127.0.0.1:8840
127.0.0.1:8850
127.0.0.1:8860
编辑文件nacos、nacos01、nacos02 ->conf->application.properties 端口号为:

启动,在bin路径中输入cmd->回车->打开命令行

启动nacos : 不要有空格,点击回车
win单机 启动:
startup.cmd -m standalone
win集群 启动: 双击nacos\bin\startup.cmd
liunx 单机启动:sh startup.sh -m standalone
liunx 集群启动:sh startup.sh

访问
http://127.0.0.1:8840/nacos/#
http://127.0.0.1:8850/nacos/#
http://127.0.0.1:8860/nacos/#



查看端口8840 8850 8860 的节点

修改:springbootalibaba_01nacosclient\src\main\resources\application.yml
server:
port: 9002
spring:
application:
name: NOCASCLIENT
cloud:
nacos:
server-addr: http://127.0.0.1:8840/ # server 地址
discovery:
server-addr: http://127.0.0.1:8840/ # client
service: ${spring.application.name}-${spring.cloud.client.ip-address}:${server.port}
查看:http://127.0.0.1:8840/nacos/# 下的服务列表

查看:http://127.0.0.1:8850/nacos/# http://127.0.0.1:8860/nacos/# 下的服务列表 没有同步


Sentinel 简单使用:https://blog.csdn.net/qq_41538097/article/details/124330640
下载dashboard:https://github.com/alibaba/Sentinel/releases
dashboard启动命令:java -jar -Dserver.port=9191 sentinel-dashboard-1.8.5.jar
dashboard访问:http://localhost:9191/#/dashboard
运行命令
找到所在目录->路径中输入cm->enter

弹出命令窗口

输入命令
默认端口号:8080
java -jar -Dserver.port=9191 sentinel-dashboard-1.8.5.jar

http://localhost:9191/#/dashboard/home
名称:springcloudalibaba_05sentinel

<dependencies>
<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-sentinelartifactId>
dependency>
dependencies>
server:
port: 8998 # 端口
spring:
application: #application
name: SENTINEL #配置名称
cloud:
nacos: # nacos 配置服务地址
server-addr: 127.0.0.1:8840
sentinel:
enabled: true # 开启 sentinel 保护
transport:
dashboard: 127.0.0.1:9191 # 链接 dashboard web端口
port: 8719 # 与dashboard通信的端口 tcp端口 默认的端口
package com.xxx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SentinelApplication {
public static void main(String[] args) {
SpringApplication.run(SentinelApplication.class, args);
}
}
package com.xxx.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
private static final Logger log = LoggerFactory.getLogger(DemoController.class);
@GetMapping("/demo")
public String demo() {
log.info("demo ok........");
return "demo ok........";
}
}
路径:http://localhost:8998/demo

路径:http://localhost:9191/#/dashboard/metric/SENTINEL





名称:springCloudAlibabaIntegration

名称:springcloud_alibaba_parent
pom
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.2.5.RELEASEversion>
parent>
<properties>
<spring.cloud.version>Hoxton.SR6spring.cloud.version>
<spring.cloud.alibaba.version>2.2.1.RELEASEspring.cloud.alibaba.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>${spring.cloud.alibaba.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
名称:spinrgcloud_alibaba_commons

名称:springcloud_alibaba_users

pom
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
dependencies>
application
server:
port: 8888
spring:
application:
name: USERS
cloud:
nacos:
server-addr: 127.0.0.1:8840
启动类
package com.xxx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class UsersApplication {
public static void main(String[] args) {
SpringApplication.run(UsersApplication.class, args);
}
}
controller
package com.xxx.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
private static final Logger log = LoggerFactory.getLogger(UserController.class);
@GetMapping("/invoke")
public String invokeProduct() {
log.info("user invoke ok !!" );
return "user invoke ok !!";
}
}
访问:http://localhost:8888/invoke

名称:springcloud_alibaba_products

pom
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
dependencies>
application
server:
port: 9999
spring:
application:
name: PRODUCTS
cloud:
nacos:
server-addr: 127.0.0.1:8840
启动类
package com.xxx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ProductsApplication {
public static void main(String[] args) {
SpringApplication.run(ProductsApplication.class, args);
}
}
controller
package com.xxx.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProductController {
private static final Logger log = LoggerFactory.getLogger(ProductController.class);
@Value("${server.port}")
private int port;
@GetMapping("/product")
public String product() {
log.info("product ok !! 当前服务的端口为:" + port);
return "product ok !! 当前服务的端口为:" + port;
}
}
访问:http://localhost:9999/product

springcloud_alibaba_users\src\main\java\com\xxx\config\BeansConfig.javapackage com.xxx.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class BeansConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
springcloud_alibaba_users\src/main/java/com/xxx/controller/UserController.javapackage com.xxx.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class UserController {
private static final Logger log = LoggerFactory.getLogger(UserController.class);
@Autowired
private RestTemplate restTemplate;
@GetMapping("/invoke")
public String invokeProduct() {
log.info("user invoke ok !!");
String str = restTemplate.getForObject("http://PRODUCTS/product", String.class);
return "user invoke ok !! 获取商品数据:" + str;
}
}
访问:http://localhost:8888/invoke

<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
package com.xxx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients //开启openFeign的调用
public class UsersApplication {
public static void main(String[] args) {
SpringApplication.run(UsersApplication.class, args);
}
}
package com.xxx.feignclients;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient("PRODUCTS")
public interface ProductClient {
@GetMapping("/product")
String product();
}
package com.xxx.controller;
import com.xxx.feignclients.ProductClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class UserController {
private static final Logger log = LoggerFactory.getLogger(UserController.class);
@Autowired
private RestTemplate restTemplate; //restTemplate方式调用
@Autowired
private ProductClient productClient;//openfeign 方式调用
@GetMapping("/invoke")
public String invokeProduct() {
//String str = restTemplate.getForObject("http://PRODUCTS/product", String.class);
String str = productClient.product();
log.info("获取商品数据:{}", str);
return "user invoke ok !! 获取商品数据:" + str;
}
}
http://localhost:8888/invoke
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
dependency>
server:
port: 8888
spring:
application:
name: USERS
cloud:
nacos:
server-addr: 127.0.0.1:8840 # nacos 地址配置
sentinel:
enabled: true # 开启通信
eager: true # 取消控制台懒加载,立即生效
transport:
port: 8719 # 端口号,默认
dashboard: 127.0.0.1:9191 # dashboard地址配置
http://localhost:9191/#/dashboard/flow/USERS
名称:springcloud_alibaba_gateway

pom 引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-gatewayartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
dependencies>
启动类
package com.xxx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
application 配置文件
server:
port: 8990
spring:
application:
name: GATEWAY
cloud:
nacos:
server-addr: 127.0.0.1:8840 # nacos 路径
gateway:
routes:
- id: users_route
uri: lb://USERS # user路径 原路径:http://localhost:8888 负载均衡:lb://USERS
predicates:
- Path=/invoke
- id: product_route
uri: lb://PRODUCTS # product路径 原路径: http://localhost:9999 负载均衡:lb://PRODUCTS
predicates:
- Path=/product
启动服务访问Nacos:http://127.0.0.1:8840/nacos/index.html#

访问:http://localhost:8990/product

访问:http://localhost:8990/invoke

路径:http://127.0.0.1:8840/nacos/index.html#


配置列表->final->+

配置->发布

user配置文件如下
server:
port: 8888
spring:
application:
name: USERS
cloud:
nacos:
server-addr: 127.0.0.1:8840 # nacos 地址配置
sentinel:
enabled: true # 开启通信
eager: true # 取消控制台懒加载,立即生效
transport:
port: 8719 # 端口号,默认
dashboard: 127.0.0.1:9191 # dashboard地址配置
发布成功,查看配置列表

<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
路径:springcloud_alibaba_parent\springcloud_alibaba_users\src\main\resources\bootstrap.yml
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8840 # 远端配置中心是谁
namespace: e0aae3f6-6328-489c-85e4-de935b880a49
group: USERS # 哪个组进行配置获取
name: users-prod # 文件名称
file-extension: yml #文件扩展名
路径:http://localhost:8888/invoke

配置列表->final->+
配置列表->final->+

配置->发布

配置文件如下
server:
port: 8990
spring:
application:
name: GATEWAY
cloud:
nacos:
server-addr: 127.0.0.1:8840 # nacos 路径
gateway:
routes:
- id: users_route
uri: lb://USERS # user路径 原路径:http://localhost:8888 负载均衡:lb://USERS
predicates:
- Path=/invoke
- id: product_route
uri: lb://PRODUCTS # product路径 原路径: http://localhost:9999 负载均衡:lb://PRODUCTS
predicates:
- Path=/product
发布成功,查看配置列表

<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8840 # 远端配置中心是谁
namespace: e0aae3f6-6328-489c-85e4-de935b880a49
group: GATEWAY # 哪个组进行配置获取
name: gateway-prod # 文件名称
file-extension: yml #文件扩展名
路径:http://localhost:8990/invoke
